首页 > 其他分享 >51nod-1523 非回文

51nod-1523 非回文

时间:2023-06-12 18:04:04浏览次数:49  
标签:51nod 样例 ++ sign int str 1523 回文


原题链接


1523 非回文



题目来源:  CodeForces



基准时间限制:1 秒 空间限制:131072 KB 分值: 40  难度:4级算法题




一个字符串是非回文的,当且仅当,他只由前p个小写字母构成,而且他不包含长度大于等于2的回文子串。

给出长度为n的非回文串s。请找出字典序比s大的,而且字典序要最小的长度为n的非回文。




Input



单组测试数据。 第一行有两个整数n 和p (1≤n≤1000; 1≤p≤26)。 第二行包含一个字符串s,它的长度是n。输入保证他是非回文的。



Output



输出字典序比s大的且字典序要最小的长度为n的非回文,如果不存在输出NO。



Input示例



样例输入1 3 3 cba 样例输入2 3 4 cba



Output示例



样例输出1 NO 样例输出2 cbd


一个字符串不存在长度为2以及以上的回文子串只要满足str[i] != str[i-1] && str[i] != str[i-2]


#include <bits/stdc++.h>
#define maxn 1005
#define INF 2e15
typedef long long ll;
using namespace std;

char str[maxn];
int main(){
//	freopen("in.txt", "r", stdin);
	int p, n;
	scanf("%d%d", &n, &p);
	scanf("%s", str);
	for(int i = 0; i < n; i++)
	 str[i] -= 'a';
	int sign = -1;
	for(int i = n - 1; i >= 0; i--){
		for(int j = str[i] + 1; j < p; j++){
			if((i < 1 || j != str[i-1]) && (i < 2 || j != str[i-2])){
				sign = i;
				str[i] = j;
				break;
			}
		}
		if(sign != -1)
		 break;
	}
	if(sign == -1){
		puts("NO");
		return 0;
	}
	for(int i = sign+1; i < n; i++){
		for(int j = 0; j < p; j++){
			if((i < 1 || j != str[i-1]) && (i < 2 || j != str[i-2])){
				str[i] = j;
				break;
			}
		}
	}
	for(int i = 0; i < n; i++)
	 str[i] += 'a';
	puts(str);
	return 0;
}





标签:51nod,样例,++,sign,int,str,1523,回文
From: https://blog.51cto.com/u_16158872/6464577

相关文章

  • 51nod-1460 连接小岛
    原题链接1460 连接小岛题目来源: CodeForces基准时间限制:1.5 秒空间限制:131072 KB分值: 40 难度:4级算法题 收藏 关注li+1  对于所有的 1≤i≤n-1。现在要将相邻的小岛用桥连接起来。现在有一条桥的长度是a,第i个......
  • 51nod-1434 区间LCM
    原题链接1434 区间LCM题目来源: TopCoder基准时间限制:1 秒空间限制:131072 KB分值: 40 难度:4级算法题 收藏 关注例如,LCM(2)=2,LCM(4,6)=12,LCM(1,2,3,4,5)=60。现在给定一个整数N(1<=N<=1000000),需要找到......
  • 51nod-1624 取余最长路
    原题链接1624 取余最长路基准时间限制:1 秒空间限制:131072 KB分值: 40 难度:4级算法题 收藏 关注佳佳有一个n*m的带权矩阵,她想从(1,1)出发走到(n,m)且只能往右往下移动,她能得到的娱乐值为所经过的位置的权的总和。有一天,她被下了恶......
  • 51nod-1191 消灭兔子
    原题链接1191 消灭兔子题目来源: 2013腾讯马拉松赛第三场基准时间限制:1 秒空间限制:131072 KB分值: 40 难度:4级算法题 收藏 关注有N只兔子,每只有一个血量B[i],需要用箭杀死免子。有M种不同类型的箭可以选择,每种箭......
  • 51nod-1158 全是1的最大子矩阵(单调栈)
    原题链接1158 全是1的最大子矩阵基准时间限制:1 秒空间限制:131072 KB分值: 80 难度:5级算法题 收藏 关注Input第1行:2个数m,n中间用空格分隔(2 <= m,n <= 500)第2 - N + 1行:每行m个数,中间用空格分隔,均为0或1。......
  • 切割回文
    题目描述阿福最近对回文串产生了非常浓厚的兴趣。如果一个字符串从左往右看和从右往左看完全相同的话,那么就认为这个串是一个回文串。例如,abcaacba是一个回文串,abcaaba则不是一个回文串。阿福现在强迫症发作,看到什么字符串都想要把它变成回文的。阿福可以通过切割字符串,使得......
  • [SHOI2011]双倍回文 题解
    [SHOI2011]双倍回文题解看了一些写回文自动机的大佬的代码,我深感敬畏,于是我转身向Manacher走去现在荣登最优解第一页……说实话,这个方法的复杂度是很玄学的,但是加了一些优化之后,就几乎不可能被卡到\(O(n^2)\)了。具体思路如下:预处理字符串部分就略过吧我们预先跑一......
  • 回文数与字符数组
    争取一天一道找实习前刷满500道今天写了一道简单的力扣题,回文数与字符数组Stringres=Integer.toString(x);Stringresrev="";for(inti=0;i<res.length();i++){resrev=res.charAt(i)+resr......
  • 【Leetcode】5-最长回文子串
    1.一般方法:暴力for循环求解,时间复杂度,空间复杂度。2.动态规划:我们发现在匹配过程中有许多重复计算的部分,我们把这些放到一个表里保存起来会减少运算,用空间换时间。时间复杂度,空间复杂度。例如“babab”字符串对应的表为:dp[i][j]为TRUE代表字符串从i到j为回文串。判断i到j是否为回文......
  • 516. 最长回文子序列
    给你一个字符串s,找出其中最长的回文子序列,并返回该序列的长度。子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。示例1:输入:s="bbbab"输出:4解释:一个可能的最长回文子序列为"bbbb"。>动态规划classSolution{public:......