No to Palindromes
/*
題意:給你一個字符串,尋找按照字典序排的下一個符合條件的字符串
下一個滿足的字符串一定是改變盡量靠右的字符才能得到(字典序),
從最右面開始找,假設當前是第i位,如果i位增加之後滿足和i-1,i-2位均不相同的話,
那麼最小的肯定就是從這裡開始改的(因為前綴沒有回文字串,所以改變i位後的串也不會有),
接下來就把後面的為都補全。
*/
# include
# include
# include
# include
using namespace std;
char a[1234567];
int n,p;
bool judge(int now)
{
for(int i=1;; i++)
{
if(a[now]+i>'a'+p-1)
return false;
if(now>0&&a[now]+i==a[now-1])
continue;
if(now>1&&a[now]+i==a[now-2])
continue;
a[now]+=i;
return true;
}
}
void get(int now)
{
for(int i=0;; i++)
{
if(now>0&&'a'+i==a[now-1])
continue;
if(now>1&&'a'+i==a[now-2])
continue;
a[now]='a'+i;
return ;
}
}
int main()
{
scanf("%d%d",&n,&p);
scanf("%s",a);
int ok=0;
int i;
for( i=n-1; i>=0; i--)
{
if(judge(i))
{
ok=1;
break;
}
}
if(ok)
{
for( i=i+1; i