2014年9月8日 星期一

Codeforces 465C No to Palindromes

#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<vector>
#include<utility>
#include<map>
#include<set>
#include<queue>
#include<cmath>
using namespace std;
typedef long long int int64;
int64 P = 7340033; int64 proot = 3;
bool rp(int* arr, int len){
if(len == 1) return true;
int64 gf[1001];
//for(int lx = 0;lx< )
for(int lx = 1;lx < len;lx++){
bool ispin = true;
for(int ly = 0;ly < lx and ispin;ly++)
if(arr[ly] != arr[lx-ly])
ispin = false;
if(ispin)
return false;
}
return true;
}
int main()
{
int n,p;scanf("%d %d", &n, &p);
char str[1050]; scanf("%s", str);
int arr[1050];
for(int lx = 0;lx < n;lx++)
arr[lx] = str[n-lx-1] - 'a';
bool ok = false;
int ptr = 0;
//bool setted = false;
while(ok == false){
/*printf("ptr = %d : ", ptr);
for(int lx = ptr;lx < n;lx++)
printf("[%d] -> ", arr[lx]);
printf("\n");
for(int i = 0;i/10000<10000;i++);*/
arr[ptr]++;
if(arr[ptr]<p){
if(rp(arr+ptr, n-ptr)){
if(ptr == 0){
ok = true;
break;
}else{
ptr--;
arr[ptr] = -1;
}
}
}else{
ptr++;
if(ptr == n)
break;
}
}
if(ok == false)
puts("NO");
else{
for(int lx=  0;lx < n;lx++)
printf("%c", arr[n-lx-1] + 'a');
printf("\n");
}
return 0;
}

沒有留言:

張貼留言