codeforce No to Palindromes!(枚举)

 1 /*
 2      题意:给定一个字符串中没有任何长度>1的回文子串!求按照字典序的该串的下一个字符串
 3      也不包含长度>1的任何回文子串!
 4      
 5      思路:从最低位进行枚举,保证第i位 不与 第 i-1位和第 i-2位相同就好了!那么因为前边i-1
 6      位没有长度>1的回文子串,那么前i位也不会出现!最后将最后边的字符按照相同的原则补齐就好了! 
 7 */
 8 #include<iostream>
 9 #include<cstdio>
10 #include<cstring>
11 #include<algorithm>
12 
13 using namespace std;
14 
15 
16 char ch[1005];
17 
18 int main(){
19     int n, p;
20     while(scanf("%d%d", &n,  &p)!=EOF){
21         ch[0]='0';
22         ch[1]='0';
23         int up='a'+p-1;
24         scanf("%s", ch+2);//从字符串第二位输入是因为第一位,第二位也要枚举 
25         bool flag=false;
26         for(int i=++n; i>=2 && !flag; --i){//枚举每一位 
27             for(int j=ch[i]+1; j<=up && !flag; ++j){//每一位应该出现的字符(从小到大) 
28                 ch[i]=j;
29                 if(ch[i]!=ch[i-1] && ch[i]!=ch[i-2]){//保证三者互不相同 
30                     flag=true;
31                     for(int k=i+1; k<=n; ++k){//补全后面 
32                         int cc;
33                         for(cc='a'; cc<=up; ++cc)
34                             if(cc!=ch[k-1] && cc!=ch[k-2]) break;
35                         ch[k]=cc;
36                     }
37                 }
38             }
39         } 
40         if(flag) printf("%s\n", ch+2);
41         else printf("NO\n");
42     }
43     return 0;
44 } 

 

转载于:https://www.cnblogs.com/hujunzheng/p/3964726.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值