1268A - Long Beautiful Integer(字符串贪心)
Posted iss-ue
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1268A - Long Beautiful Integer(字符串贪心)相关的知识,希望对你有一定的参考价值。
(其实要发现只需要考虑[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(字符串贪心)的主要内容,如果未能解决你的问题,请参考以下文章
C - Long Beautiful Integer codeforces 1269C
Some beautiful Progress Bars in WPF
Beautiful and Powerful Correlation Tables in R
CodeForces 665E Beautiful Subarrays 字典树