codeforces 464A No to Palindromes! 贪心
2014-09-08 21:46
453 查看
题意:给一个合法字符串满足它的任意子串不是回文串,输出下一个长度相同、字典序比它大的满足任意子串不是回文串的合法字符
串。(下一个指的是满足条件的字符串中字典序最小的那个)
思路:我们对字符串从后往前扫,考虑当前位i,此位值为x(设a的值为0),那么要在[x+1,p-1]中选取最小的且不与( i - 2 )位和( i - 1 )
位相同的数字作为这位新的值,如果找到之前位的都不作变化。如果此位找不到相应的值,那么我们考虑(i -1)位,并将 i 位待
定。就这样从前向后扫,直到找到可以修改的位置,记为pos,以及pos位要变成的对应值为ans。如果pos=-1,说明无法修改,输出
NO。不然对( pos - 1 )位到( len - 1 )位重新确定值,每一位取不与前两位相同的最小值即可。详见代码:
串。(下一个指的是满足条件的字符串中字典序最小的那个)
思路:我们对字符串从后往前扫,考虑当前位i,此位值为x(设a的值为0),那么要在[x+1,p-1]中选取最小的且不与( i - 2 )位和( i - 1 )
位相同的数字作为这位新的值,如果找到之前位的都不作变化。如果此位找不到相应的值,那么我们考虑(i -1)位,并将 i 位待
定。就这样从前向后扫,直到找到可以修改的位置,记为pos,以及pos位要变成的对应值为ans。如果pos=-1,说明无法修改,输出
NO。不然对( pos - 1 )位到( len - 1 )位重新确定值,每一位取不与前两位相同的最小值即可。详见代码:
// file name: codeforces464A.cpp // // author: kereo // // create time: 2014年09月08日 星期一 10时05分10秒 // //***********************************// #include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<set> #include<map> #include<vector> #include<stack> #include<cmath> #include<algorithm> using namespace std; typedef long long ll; const int MAXN=10000+100; const int inf=0x3fffffff; #define L(x) (x<<1) #define R(x) (x<<1|1) int n,p; char str[MAXN]; int main() { while(~scanf("%d%d",&n,&p)){ scanf("%s",str); int len=strlen(str); int flag=0; int pos=len-1,ans; for(int i=len-1;i>=0;i--){ int x=str[i]-'a'+1; if(i>=2){ int l=str[i-2]-'a'+1; int r=str[i-1]-'a'+1; for(int k=x+1;k<=p;k++) if(k!=l && k!=r){ flag=1;ans=k-1; break; } if(flag) break; pos=i-1; } else if(i == 1){ int l=str[i-1]-'a'+1; for(int k=x+1;k<=p;k++) if(k!=l){ flag=1; ans=k-1; break; } if(flag) break; pos=i-1; } else{ if(x!=p){ flag=1; ans=x; break; } pos=i-1; } } if(pos == -1){ printf("NO\n"); continue; } str[pos]=ans+'a'; pos++; for(int i=pos;i<len;i++){ if(i == 1){ int l=str[i-1]-'a'; for(int k=0;k<p;k++) if(k!=l){ str[i]=k+'a'; break; } } else { int l=str[i-2]-'a'; int r=str[i-1]-'a'; for(int k=0;k<p;k++) if(k!=l && k!=r){ str[i]=k+'a'; break; } } } printf("%s\n",str); } return 0; }
相关文章推荐
- codeforces 464A No to Palindromes! 贪心
- codeforces 464A No to Palindromes! 贪心
- Codeforces 464A No to Palindromes!(构造)
- 【codeforces】 464A No to Palindromes!
- Codeforces 464A No to Palindromes!
- Codeforces 464A No to Palindromes!
- 【CodeForces - 849】C From Y to Y 【思维+构造+贪心】
- Codeforces 465C No to Palindromes!【暴力+思维】
- CodeForces-729C-Road to Cinema(二分查找 贪心 排序)
- codeforces 231 C To Add or Not to Add 贪心
- 【CODEFORCES】 C. No to Palindromes!
- 【CodeForces 729C】【二分+贪心】Road to Cinema 题解
- Codeforces 464 A. No to Palindromes!
- Codeforces 758D Ability To Convert 【贪心】
- SGU 275 - To xor or not to xor 按位贪心 线性基
- CodeForces 137C【贪心+优先队列】
- Codeforces 377B Preparing for the Contest【二分查找+优先队列+贪心】
- codeforces--C - Anya and Ghosts(贪心)
- codeforces 116D Lawnmowe 贪心
- Codeforces 605A Sorting Railway Cars [贪心]