
思路:
对于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 }
来源:https://www.cnblogs.com/wsy107316/p/12269047.html