C. No to Palindromes!
time limit per test
memory limit per test
input
output
hates palindromes. He assumes that string s is tolerable if each its character is one of the first p letters of the English alphabet and s
s of length n. Help him find the lexicographically next tolerable string of the same length or else state that such string does not exist.
Input
n and p (1 ≤ n ≤ 1000; 1 ≤ p ≤ 26). The second line contains string s, consisting of n
Output
NO" (without the quotes).
Examples
input
3 3 cba
output
NO
input
3 4 cba
output
cbd
input
4 4 abcd
output
abda
对于每个字符若str[i] != str[i-1] && str[i] != str[i-2]则必定不会出存在回文串.从尾到头遍历字符串str,对于str[i], 若存在字符变量p使得p > str[i] && p != str[i-1] && p != str[i-2]则str[i] = p, 从j = i + 1开始找到最小的字符,为str[j]赋值满足不为回文串的条件
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <map>
#include <vector>
#include <queue>
#define maxn 1005
#define MOD 1000000007
#define INF 1e9
using namespace std;
typedef long long ll;
char str[maxn];
int main(){
// freopen("in.txt", "r", stdin);
int n, p;
scanf("%d%d", &n, &p);
scanf("%s", str);
int sign = -1;
for(int i = n-1; i >= 0; i--){
for(int j = str[i] + 1; j < p + 'a'; j++){
if(i && j == str[i-1])
continue;
if(i > 1 && j == str[i-2])
continue;
str[i] = j;
sign = i;
break;
}
if(sign != -1)
break;
}
if(sign == -1){
puts("NO");
return 0;
}
for(int i = sign+1; i < n; i++){
for(int j = 'a'; j < p + 'a'; j++){
if(i && j == str[i-1])
continue;
if(i > 1 && j == str[i-2])
continue;
str[i] = j;
break;
}
}
puts(str);
return 0;
}