标签:i++ span 数字 lse its pac bit -- set
\(其实要发现只需要考虑[1,k]这个循环节\)
\(开始我们想让数字最小那么[1,k]就和目标串相等就好了\)
\(然后我们从目标串的k+1位开始判断\)
\(Ⅰ.若相等,无事发生,继续判断下一个字母\)
\(Ⅱ.若比目标串大,那么继续判断下去也一定大,break\)
\(Ⅲ.若比目标串小,那么要从k往前找一个不为9的数+1,然后这个数到k都变成0\)
\(使得构造出比目标串大一点的串,break\)
\(由此,我们构造出了[1,k],那么后面也只是循环罢了。\)
#include <bits/stdc++.h>
using namespace std;
int n,k;
char s[200009];
int a[200009],top,vis[200009];
int main()
{
cin>>n>>k>>(s+1);
for(int i=1,l=strlen(s+1);i<=l;i++)
{
if(i<=k) a[i]=s[i]-‘0‘;
else
{
int t=i%k;
if(t==0) t=k;
if(a[t]>s[i]-‘0‘) break;//分出胜负了
else if(a[t]==s[i]-‘0‘) continue;
else
{
int num;
for(int j=k;j>=1;j--)
if(a[j]!=9) {num=j;break;}
a[num]+=1;
for(int j=num+1;j<=k;j++) a[j]=0;
break;
}
}
}
cout<<strlen(s+1)<<endl;
for(int i=1,l=strlen(s+1);i<=l;i++)
{
int t=i%k;
if(t==0) t=k;
cout<<a[t];
}
}
1268A - Long Beautiful Integer(字符串贪心)
标签:i++ span 数字 lse its pac bit -- set
原文地址:https://www.cnblogs.com/iss-ue/p/12896590.html