Codeforces Round #609 (Div. 2)---C. 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 }