题目大意:

给一个字符串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;
}