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 字典树

Qt 从QByteArray类型数据恢复long in型数据

line 1 too long in file 怎么办