zoukankan      html  css  js  c++  java
  • 1268A

    传送门开启了传送门吃

    (其实要发现只需要考虑[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];	
    	}	    
    }
    
  • 相关阅读:
    struts2简介
    项目整合SpringDataRedis
    SpringDataRedis入门Demo
    包管理-rpm
    文件查找与压缩
    N042第一周
    Shell
    Linux下终端字体颜色设置方法
    文本处理工具作业
    正则表达式
  • 原文地址:https://www.cnblogs.com/iss-ue/p/12896590.html
Copyright © 2011-2022 走看看