196D The Next Good String
2024-08-29 11:40:54
题目大意
给定n和一个字符串,求一个新字符串使得这个字符串不存在长度大于等于n的回文子串且在字典序大于原串的情况下最小。
分析
我们知道如果有一个长度为n+2的回文串,那它一定由一个长度为n的回文串构成,所以我们只寻找长度为n和n+1的回文串。我们枚举每个位置的字母使最终字符串满足条件即可,有一些处理详见代码(注意判断回文串的相减部分)。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
#define uli unsigned long long
const uli HASH = ;
uli hsh[],h1[],h2[];
char s[],ans[];
int n,m;
inline bool add(int x){
while(s[x]=='z'){
s[x]='a';
x--;
}
if(x<)return ;
s[x]++;
return ;
}
inline bool ok(int le,int ri){
if(le<)return ;
if((h1[ri]-h1[le-]*hsh[ri-le+])*hsh[le-]==h2[ri]-h2[le-])
return ;
return ;
}
inline bool dfs(int wh,int is){
if(wh==n)return ;
for(ans[wh]=(is?s[wh]:'a');ans[wh]<='z';ans[wh]++){
h1[wh+]=h1[wh]*HASH+(ans[wh]-'a');
h2[wh+]=h2[wh]+(ans[wh]-'a')*hsh[wh];
if(ok(wh-m+,wh+)&&ok(wh-m+,wh+)&&
dfs(wh+,is&(ans[wh]==s[wh])))
return ;
}
return ;
}
int main(){
int i,j,k;
scanf("%d",&m);
scanf("%s",s);
n=strlen(s);
hsh[]=;
for(i=;i<=n+;i++)
hsh[i]=hsh[i-]*HASH;
if(m==||!add(n-)){
puts("Impossible");
return ;
}
if(dfs(,)){
for(i=;i<n;i++)cout<<ans[i];
puts("");
}else puts("Impossible");
return ;
}
最新文章
- Oracle RAC客户端tnsnames.ora相关配置及测试
- [Android]ListFragment.setEmptyText() 抛 java.lang.IllegalStateException
- 【11_83】Remove Duplicates from Sorted List
- VS中设置#define _CRT_SECURE_NO_WARNINGS的两种方式
- posix thread API列表
- [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)
- YaHoo Web优化的14条法则
- string_array.go
- lsblk
- ip2Long 代码
- Windows不能在本地计算机启动MongoDB,错误代码 100
- <;3>;lua字符串
- MarkDownPad Pro 支持github格式的markdown语法
- js05
- favi.icon是什么?
- uva 699 The Falling Leaves(建二叉树同一时候求和)
- Xcode 提交APP时遇到 &ldquo;has one iOS Distribution certificate but its private key is not installed&rdquo;
- DESC和 ACS
- BEM —— 源自Yandex的CSS 命名方法论
- HDU1086 You can Solve a Geometry Problem too(计算几何)
热门文章
- jquery的插件选择chosen的使用
- hdu-5183-Negative and Positive (NP)(hash模板)
- BZOJ - 2243 染色 (树链剖分+线段树+区间合并)
- QT 中“ std::cerr ”的使用方法【转载】
- secret CRT 会话光标不闪烁问题
- docker容器的服务发现:consul
- 4、运行成功的Demo(PyCharm+Selenium)
- Mac上制作Centos7系统U盘安装盘
- docker容器升级脚本
- 一文读懂非关系型数据库(NoSQL)