Codeforces Round #265 (Div. 1) A
2014-09-08 09:51
381 查看
A. No to Palindromes!
题意:一个长度为n的串,可以包含前p个小写字母。串中不包含长度为2及以上的回文串。求字典序比它大的下一个这样的串,如果没有输出NO。
思路:使串的字典序逐渐增加,并测试是否满足要求。刚开始我的解法是每次字典序+1,结果被hack了,这不是重点,重点是hack我的人是
tourist !
后来我意识到是TLE不是WA,就用了一种贪心方法,从头开始扫描,如果发现回文,立即让回文的地方增加。
题意:一个长度为n的串,可以包含前p个小写字母。串中不包含长度为2及以上的回文串。求字典序比它大的下一个这样的串,如果没有输出NO。
思路:使串的字典序逐渐增加,并测试是否满足要求。刚开始我的解法是每次字典序+1,结果被hack了,这不是重点,重点是hack我的人是
tourist !
后来我意识到是TLE不是WA,就用了一种贪心方法,从头开始扫描,如果发现回文,立即让回文的地方增加。
#include <iostream> #include <stdio.h> #include <cmath> #include <algorithm> #include <iomanip> #include <cstdlib> #include <string> #include <memory.h> #include <vector> #include <queue> #include <stack> #include <map> #include <set> #include <ctype.h> #include <sstream> #define INF 1000000000 #define ll long long #define min3(a,b,c) min(a,min(b,c)) #define max3(a,b,c) max(a,max(b,c)) #define MAXN 100010 using namespace std; char str[1010]; int num[1010]; int n,p; bool judge(){ for(int i=1;i<n-1;i++){ if(num[i-1]==num[i+1])return false; } for(int i=0;i<n-1;i++){ if(num[i]==num[i+1])return false; } return 1; } bool add(){ num[n-1]++; int t=n-1; while(num[t]==p){ num[t]=0; t--; if(t<0)return 0; num[t]++; } return 1; } bool add2(){ for(int i=0;i<n;i++){ if(i+1<n&&num[i]==num[i+1]){ num[i+1]++; int t=i+1; while(num[t]==p){ num[t]=0; t--; if(t<0)return 0; num[t]++; } for(int j=t+1;j<n;j++){ num[j]=0; } } if(i+2<n&&num[i]==num[i+2]){ num[i+2]++; int t=i+2; while(num[t]==p){ num[t]=0; t--; if(t<0)return 0; num[t]++; } for(int j=t+1;j<n;j++){ num[j]=0; } } } return 1; } int main(){ while(cin>>n>>p){ cin>>str; int len=strlen(str); for(int i=0;i<len;i++){ num[i]=str[i]-'a'; } while(true){ if(!add()){ cout<<"NO"<<endl; break; } if(!add2()){ cout<<"NO"<<endl; break; } if(judge()){ for(int i=0;i<n;i++){ str[i]=num[i]+'a'; } cout<<str<<endl; break; } } } return 0; }
相关文章推荐
- Codeforces Round #265 (Div. 2) D. Restore Cube 立方体判断
- Codeforces Round #265 (Div. 1) C. Substitutes in Number dp
- Codeforces Round #265 (Div. 2)
- Codeforces Round #265 (Div. 2) D. Restore Cube 立方体判断
- Codeforces Round #265 (div2) B. Inbox (100500)
- Codeforces Round #265 (Div. 2) 解题报告
- Codeforces Round #265 (Div. 2) E
- Codeforces Round #265 (div2) A. inc ARG
- Codeforces Round #265 (Div. 2) D. Restore Cube
- Codeforces Round #265 (Div. 2) E. Substitutes in Number
- Codeforces Round #265 (Div. 2)D. Restore Cube 暴力
- Codeforces Round #265 (Div. 2)
- Codeforces Round #265 (Div. 2) E. Substitutes in Number
- Codeforces Round #265 (Div. 2)D(判断立方体)
- Codeforces Round #265 (Div. 2)
- Codeforces Round #265 (Div. 2) A. inc ARG
- Codeforces Round #265 (Div. 2)E(数位dp)
- Codeforces Round #265 (Div. 2) C. No to Palindromes!
- Codeforces Round #265 (Div. 1)
- Codeforces Round #265 (Div. 2) B. Inbox (100500)