CF 464A No to Palindromes!

来源:互联网 发布:软件开发团队协作 编辑:程序博客网 时间:2024/04/30 09:18

给出的串是一个不包含回文子串的串,再找到一个字典序比该串大的不包含回文子串的新串。

新串是可以通过变换旧串得到的,从后往前遍历旧串,对每个字符进行枚举,枚举的时候需要判断该字符与它的前两个字符是否都不相等,若都不相等则这个枚举出的字符成立。

具体细节看代码。

#include<cstdio>char str[1005];int n,p;int main(){    int i;    char ch;    scanf("%d%d",&n,&p);    scanf("%s",str);    char limit='a'+p-1;    for(i=n-1;i>=0;i--)    {        for(ch=str[i]+1;ch<=limit;ch++)        {            if(i>1)            {                if(ch==str[i-1] || ch==str[i-2])                {                    continue;                }            }            else if(i>0)            {                if(ch==str[i-1])                {                    continue;                }            }            str[i]=ch;            int j;            for(j=i+1;j<n;j++)            {                char tmp;                for(tmp='a';tmp<=limit;tmp++)                {                    if(j>1)                    {                        if(tmp==str[j-1] || tmp==str[j-2])                        {                            continue;                        }                    }                    else if(j>0)                    {                        if(tmp==str[j-1])                        {                            continue;                        }                    }                    str[j]=tmp;                    break;                }            }            printf("%s\n",str);            return 0;        }    }    printf("NO\n");    return 0;}


0 0