标签:os io ar for sp on c amp ios
/* 题意:给你一个字符串,寻找按照字典序排的下一个符合条件的字符串 下一个满足的字符串一定是改变尽量靠右的字符才能得到(字典序), 从最右面开始找,假设当前是第i位,如果i位增加之后满足和i-1,i-2位均不相同的话, 那么最小的肯定就是从这里开始改的(因为前缀没有回文字串,所以改变i位后的串也不会有), 接下来就把后面的为都补全。 */ # include<stdio.h> # include<algorithm> # include<string.h> # include<iostream> 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<n; i++) // get(i); printf("%s\n",a); } else printf("NO\n"); return 0; }
标签:os io ar for sp on c amp ios
原文地址:http://blog.csdn.net/lp_opai/article/details/39136219