codeforce No to Palindromes!(枚举)

简介:

/*
     题意:给定一个字符串中没有任何长度>1的回文子串!求按照字典序的该串的下一个字符串
     也不包含长度>1的任何回文子串!
     
     思路:从最低位进行枚举,保证第i位 不与 第 i-1位和第 i-2位相同就好了!那么因为前边i-1
     位没有长度>1的回文子串,那么前i位也不会出现!最后将最后边的字符按照相同的原则补齐就好了! 
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>

using namespace std;


char ch[1005];

int main(){
    int n, p;
    while(scanf("%d%d", &n,  &p)!=EOF){
        ch[0]='0';
        ch[1]='0';
        int up='a'+p-1;
        scanf("%s", ch+2);//从字符串第二位输入是因为第一位,第二位也要枚举 
        bool flag=false;
        for(int i=++n; i>=2 && !flag; --i){//枚举每一位 
            for(int j=ch[i]+1; j<=up && !flag; ++j){//每一位应该出现的字符(从小到大) 
                ch[i]=j;
                if(ch[i]!=ch[i-1] && ch[i]!=ch[i-2]){//保证三者互不相同 
                    flag=true;
                    for(int k=i+1; k<=n; ++k){//补全后面 
                        int cc;
                        for(cc='a'; cc<=up; ++cc)
                            if(cc!=ch[k-1] && cc!=ch[k-2]) break;
                        ch[k]=cc;
                    }
                }
            }
        } 
        if(flag) printf("%s\n", ch+2);
        else printf("NO\n");
    }
    return 0;
}

目录
相关文章
|
Java
Leetcode 467. Unique Substrings in Wraparound String
大概翻译下题意,有个无限长的字符串s,是由无数个「abcdefghijklmnopqrstuvwxy」组成的。现在给你一个字符串p,求多少个p的非重复子串在s中出现了?
51 0
Palindromes(判断回文串)
Palindromes(判断回文串)
50 0
成功解决ValueError: ‘usecols‘ must either be list-like of all strings, all unicode, all integers or a ca
成功解决ValueError: ‘usecols‘ must either be list-like of all strings, all unicode, all integers or a ca
|
人工智能
Constant Palindrome Sum
Constant Palindrome Sum
1024. Palindromic Number (25)
#include #include #include #include #include using namespace std; bool judge(string s){ string st = s; reverse(st.
792 0