题解:
这里的m一定是等于n的,n为数最大为n个9,这n个9一定满足条件,根据题目意思,前k个一定是和原序列前k个相等,因此如果说我们构造出来的大于等于原序列,直接输出就可以了,否则,由于后m-k个一定是重复前k个,我们只能在前k个改动,所以只需要让前k个加1就行了,然后在根据题意构造一遍。
#include<bits/stdc++.h> using namespace std; const int N=2E5+7; char s[N],s1[N]; void solve() { int n,k; cin>>n>>k; cin>>s; for(int i=0;i<k;i++){ for(int j=i;j<n;j+=k){ s1[j]=s[i]; } } if(strcmp(s1,s)>=0){ cout<<n<<endl; printf("%s",s1); } else { for(int i=k-1;i>=0;i--){ if(s1[i]=='9') { s1[i]='0'; } else { s1[i]=s1[i]+1; break; } } for(int i=0;i<k;i++){ for(int j=i;j<n;j+=k){ s1[j]=s1[i]; } } cout<<n<<endl; printf("%s",s1); } } int main(){ solve(); return 0; }