常规做法是枚举每个字符串每个位置,时间复杂度O(n*len*len),(建字典树O(n*len))。

然而我看这题第一眼想的是时间复杂度O(n*len)的算法。。就是建正反两棵字典树,每个字符串跑分别跑正反一遍字典树,再看看正反跑的结果能不能拼成原串。

然而常数太大了点,并没什么卵用。。

 #include<cstdio>
#include<cstring>
using namespace std;
#define MAXL 22
#define MAXN 50100 int ch0[MAXN*MAXL][],tn0,ch1[MAXN*MAXL][],tn1;
bool flag[][MAXN*MAXL];
void insert(char *s){
int x=,len=strlen(s);
for(int i=; i<len; ++i){
int y=s[i]-'a';
if(ch0[x][y]==) ch0[x][y]=++tn0;
x=ch0[x][y];
}
flag[][x]=;
x=;
for(int i=len-; i>=; --i){
int y=s[i]-'a';
if(ch1[x][y]==) ch1[x][y]=++tn1;
x=ch1[x][y];
}
flag[][x]=;
} char path[MAXL];
bool vis[][MAXL];
void query(int len){
memset(vis,,sizeof(vis));
int x=;
for(int i=; i<len; ++i){
int y=path[i]-'a';
if(ch0[x][y]==) break;
x=ch0[x][y];
if(flag[][x]) vis[][i]=;
}
x=;
for(int i=len-; i>=; --i){
int y=path[i]-'a';
if(ch1[x][y]==) break;
x=ch1[x][y];
if(flag[][x]) vis[][i]=;
}
}
void dfs(int x,int k){
if(flag[][x]){
query(k);
bool ishat=;
for(int i=; i<k; ++i){
if(vis[][i-] && vis[][i]){
ishat=;
break;
}
}
if(ishat){
for(int i=; i<k; ++i) putchar(path[i]);
putchar('\n');
}
}
for(int i=; i<; ++i){
if(ch0[x][i]){
path[k]=i+'a';
dfs(ch0[x][i],k+);
}
}
}
int main(){
char str[MAXL];
while(~scanf("%s",str)) insert(str);
dfs(,);
return ;
}

最新文章

  1. fileupload图片预览功能
  2. 如何利用Pre.im分发iOS测试包
  3. Qt 无边框窗体改变大小 完美实现(全部自己实现)
  4. C#抽象类、抽象方法、抽象属性
  5. Visual StudioTools for Unity 使用技巧2
  6. 用FSM写Case,玩过没?
  7. 一篇顺手的Ubuntu+caffe配置笔记
  8. Lombok之使用详解
  9. mui-H5下载图片到本地
  10. Java File类与文件IO流总结
  11. 洛谷2754 [CTSC1999]家园
  12. 发票打印不全不完整的解决方案(Win10)
  13. LaTeX字体设置
  14. 用于主题检测的临时日志(0ece3f5c-d74f-449c-85a7-ed53fffb0e94 - 3bfe001a-32de-4114-a6b4-4005b770f6d7)
  15. 中国移动CMPP协议错误码
  16. jar/war/ear文件的区别
  17. Django REST framework 之JWT认证
  18. 【题解】BZOJ 3065: 带插入区间K小值——替罪羊树套线段树
  19. ios真机测试问题
  20. [AGC011F] Train Service Planning [线段树优化dp+思维]

热门文章

  1. 初学require.js
  2. xcode Git
  3. editorial-render A
  4. 【转】基于LDA的Topic Model变形
  5. tcp/ip程序
  6. 反弹SHELL
  7. iOS UITableView 的beginUpdates和endUpdates
  8. Office 2010启动时出现无法验证此应用程序的许可证的解决
  9. hdu5832 A water problem
  10. codeforces A. K-Periodic Array 解题报告