Codeforces Round #609 (Div. 2)---C. Long Beautiful Integer

Long Beautiful Integer

 

 思路:

对于n位数来说,全为9一定是beautiful的,所以结果的m一定是等于n的。因为要求第i位于第i+k位相等,所以数的值实际上是取决于前k位的,因为需要大于等于原字符串,所以可以直接取原字符串的前k位,构造出新的字符串b,如果b>=a,就可以直接输出,如果不是,可以将b的前k为取出,然后+1,就可以构造出最小的大于等于a的beautiful串。

AC_Code

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int maxn = 200010;
 5 const int mod=1e9+7;
 6 char a[maxn],b[maxn];
 7 
 8 int main()
 9 {
10     int n,k;
11     scanf("%d %d %s",&n,&k,a);
12     for(int i=0;i<k;i++){
13         for(int j=i;j<n;j+=k){
14             b[j]=a[i];
15         }
16     }
17     if( strcmp(b,a)>=0){
18         printf("%d\n%s\n",n,b);
19     }
20     else{
21         for(int i=k-1;i>=0;i--){
22             if( b[i]=='9'){
23                 b[i]='0';
24             }
25             else{
26                 b[i]++;
27                 break;
28             }
29         }
30         for(int i=0;i<k;i++){
31             for(int j=i;j<n;j+=k){
32                 b[j]=b[i];
33             }
34         }
35         printf("%d\n%s\n",n,b);
36     }
37     return 0;
38 }

 

posted @ 2020-02-06 16:09  swsyya  阅读(130)  评论(0编辑  收藏  举报

回到顶部