Three Palindromes

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1244    Accepted Submission(s): 415

Problem Description
Can we divided a given string S into three nonempty palindromes?
 
Input
First line contains a single integer T≤20 which denotes the number of test cases.

For each test case , there is an single line contains a string S which only consist of lowercase English letters.1≤|s|≤20000

 
Output
For each case, output the "Yes" or "No" in a single line.
 
Sample Input
2
abc
abaadada
 
Sample Output
Yes
No
 
 
 
题目大意:问是否可以找出三段回文串。
 
题解:
没有进行暴力压位,时间接近超时。但是很侥幸过了。
 
#include<bits/stdc++.h>
using namespace std;
#define min(a,b) ((a)<(b)?(a):(b))
const int maxn=20200;
int pre[maxn*2],suf[maxn*2];
int p[maxn*2];
char str[maxn],trans[maxn*2];
int Transform(){
// memset(p,0,sizeof(p));
memset(pre,0,sizeof(pre));
memset(suf,0,sizeof(suf));
int len=strlen(str);
trans[0]='$';
for(int i=1;i<=2*len;i+=2){
trans[i]='#';
trans[i+1]=str[i/2];
}
trans[2*len+1]='#';
trans[2*len+2]='@';
return 2*len+1;
}
int manacher(){
int len=Transform();
int mx=0,pos=0;
for(int i=1;i<=len;i++){
if(i<mx){
p[i]=min(p[2*pos-i],mx-i);
}else{
p[i]=1;
}
for(;trans[i+p[i]]==trans[i-p[i]];p[i]++);
if(mx<i+p[i]){
mx=i+p[i];
pos=i;
}
}
return len;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%s",str);
int lens=strlen(str);
if(lens<3){
printf("No\n");continue;
}else if(lens==3){
printf("Yes\n");continue;
}else{
int len= manacher();
for(int i=2;i<len;i++){
if(p[i]==i){
pre[i+p[i]-1]=1;
}
if(p[i]==len-i+1){
suf[i-p[i]+1]=1;
}
}
int flag=0;
for(int i=2;i<len&&(!flag);i++){
for(int j=1;j<p[i]&&(!flag);j++){
if(pre[i-j]&suf[i+j]){
flag=1;
printf("Yes\n");
}
}
}
if(!flag){
printf("No\n");
}
}
}
return 0;
}

  

 
 

最新文章

  1. 【Java EE 学习 36】【struts2】【struts2系统验证】【struts2 ognl值栈】【struts2 ongl标签】【struts2 UI标签】【struts2模型驱动和令牌机制】
  2. java遍历Map的几种方式
  3. 李洪强iOS开发之keychain的使用
  4. Javascript之响应式相册
  5. oracle插入例子
  6. css制作最简单导航栏
  7. Excel 2010高级应用-面积图(三)
  8. Spring 框架
  9. SpringBoot分布式 - SpringCloud
  10. [译]C#7 Pattern Matching
  11. 浅谈 Mysql 中的索引
  12. php高并发,大流量
  13. python 回溯法 子集树模板 系列 —— 13、最佳作业调度问题
  14. 使用OpenSSL自建CA + Nginx配置HTTPS
  15. javascript模拟flash头像裁切上传
  16. JAVAWEB dbutils执行sql命令并遍历结果集时不能查到内容的原因
  17. cmd 中运行testng代码
  18. 洛谷 P3171 [CQOI2015]网络吞吐量 解题报告
  19. python简单爬虫(二)
  20. TFS(Visual Studio Team Services) git认证失败 authentication fails 的解决方案

热门文章

  1. poj1195(二维树状数组)
  2. How to extract pcd from a rosbag? 如何从rosbag中提取pcd
  3. Nodejs 文档概览
  4. winform按钮文字换行
  5. Windows服务注意!
  6. wordpress显示FTP上传
  7. google ---gson字符串数组用GSON解析然后用逗号隔开拼接,去掉最后一个逗号
  8. 利用DSB2017冠军开源代码为LUNA16生成mask
  9. python自动化day2-列表、字典、集合
  10. 查询mysql单库的修改时间,大小