传送门

题目大意

给定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 ;
}

最新文章

  1. Oracle RAC客户端tnsnames.ora相关配置及测试
  2. [Android]ListFragment.setEmptyText() 抛 java.lang.IllegalStateException
  3. 【11_83】Remove Duplicates from Sorted List
  4. VS中设置#define _CRT_SECURE_NO_WARNINGS的两种方式
  5. posix thread API列表
  6. [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)
  7. YaHoo Web优化的14条法则
  8. string_array.go
  9. lsblk
  10. ip2Long 代码
  11. Windows不能在本地计算机启动MongoDB,错误代码 100
  12. &lt;3&gt;lua字符串
  13. MarkDownPad Pro 支持github格式的markdown语法
  14. js05
  15. favi.icon是什么?
  16. uva 699 The Falling Leaves(建二叉树同一时候求和)
  17. Xcode 提交APP时遇到 &ldquo;has one iOS Distribution certificate but its private key is not installed&rdquo;
  18. DESC和 ACS
  19. BEM —— 源自Yandex的CSS 命名方法论
  20. HDU1086 You can Solve a Geometry Problem too(计算几何)

热门文章

  1. jquery的插件选择chosen的使用
  2. hdu-5183-Negative and Positive (NP)(hash模板)
  3. BZOJ - 2243 染色 (树链剖分+线段树+区间合并)
  4. QT 中“ std::cerr ”的使用方法【转载】
  5. secret CRT 会话光标不闪烁问题
  6. docker容器的服务发现:consul
  7. 4、运行成功的Demo(PyCharm+Selenium)
  8. Mac上制作Centos7系统U盘安装盘
  9. docker容器升级脚本
  10. 一文读懂非关系型数据库(NoSQL)