国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

51Nod - 1523 構(gòu)造

2019-11-09 21:03:42
字體:
供稿:網(wǎng)友

題意:

一個字符串是非回文的,當且僅當,他只由前p個小寫字母構(gòu)成,而且他不包含長度大于等于2的回文子串。

給出長度為n的非回文串s。請找出字典序比s大的,而且字典序要最小的長度為n的非回文。

Input
單組測試數(shù)據(jù)。第一行有兩個整數(shù)n 和p (1≤n≤1000; 1≤p≤26)。第二行包含一個字符串s,它的長度是n。輸入保證他是非回文的。Output
輸出字典序比s大的且字典序要最小的長度為n的非回文,如果不存在輸出NO。Input示例
樣例輸入13 3cba樣例輸入23 4cbaOutput示例
樣例輸出1NO樣例輸出2cbd

思路:

構(gòu)造題。這道題關(guān)鍵是題目給出的串不會存在回文串,細想一下,就需要任意位置i滿足str[i]!=str[i-1]&&str[i]!=str[i-2],只有這樣才能保證得到的串不存在回文串。要求字典序最小,那么首先要找到最靠末尾的一個位置i,字符可以增大,且滿足str[i]!=str[i-1]&&str[i]!=str[i-2],然后將這個位置的字符增大,剩下的,就是將i+1到n的位置的字符重寫,要求是滿足以上條件且字典序最小即可。

代碼:

#include <cstdio>#include <cstring>using namespace std;const int MAXN = 1005;char str[MAXN];int main() {	int n, p;	scanf("%d%d%s", &n, &p, str + 1);	for (int i = n; i >= 1; i--) {		int x = str[i] - 'a';		if (x < p - 1) {			int y = -1;			for (int j = x + 1; j < p; j++) {				char c = 'a' + j;				if (i > 1 && c == str[i - 1]) continue;				if (i > 2 && c == str[i - 2]) continue; 				y = j;				break;			}			if (y == -1) continue;			str[i] = 'a' + y;			//PRintf("%d : %c/n", i, 'a' + y);			if (i == n) {				puts(str + 1);				return 0;			}			for (int j = i + 1; j <= n; j++) {				for (int k = 0; k < p; k++) {					char c = 'a' + k;					if (j > 1 && c == str[j - 1]) continue;					if (j > 2 && c == str[j - 2]) continue; 					str[j] = c;					break;				}			}			puts(str + 1);			return 0;		}	}	puts("NO");	return 0;}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 庄浪县| 全椒县| 浦东新区| 清流县| 铁岭县| 汉沽区| 太湖县| 饶河县| 宾阳县| 九龙县| 云和县| 南乐县| 长兴县| 宁海县| 台州市| 邹平县| 静乐县| 汉阴县| 巴塘县| 关岭| 响水县| 康定县| 红原县| 绥滨县| 屏山县| 涿州市| 辽源市| 大田县| 玛曲县| 新丰县| 忻城县| 青海省| 乌兰察布市| 古丈县| 嘉黎县| 万载县| 望城县| 江孜县| 昔阳县| 嘉兴市| 涿鹿县|