题目大意:
给一个字符串s,要求你构造一个字符串t,使得t>=s, 并且.
题目思路:
构造的字符串可以看成,前k个字符循环构造而成。
所以对前k个组成的数字进行+1即可,特判进位0。
或者前k个数字不变,判断一下即可。
很明显..思维题,AC:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll INF=1000000000000005;
const int maxn=1e6+5;
ll n,m,p;
char s[maxn],t[maxn];
int main()
{
scanf("%lld%lld",&n,&m);
scanf("%s",s+1);
for(int i=1;i<=m;i++)
t[i]=s[i];
for(int i=1;i<=m;i++)
for(int k=i+m;k<=n;k+=m) t[k]=t[i];
if(strcmp(t+1,s+1)>=0)
{
printf("%lld\n%s\n",n,t+1);
return 0;
}
for(int i=m;i>=1;i--)
{
if(t[i]!='9')
{
t[i]++;
break;
}
else
t[i]='0';
}
for(int i=1;i<=m;i++)
for(int k=i+m;k<=n;k+=m) t[k]=t[i];
printf("%lld\n%s\n",n,t+1);
return 0;
}