博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2017中国大学生程序设计竞赛-哈尔滨站 A - Palindrome
阅读量:6268 次
发布时间:2019-06-22

本文共 2855 字,大约阅读时间需要 9 分钟。

Palindrome

Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)

Total Submission(s): 426    Accepted Submission(s): 163

Problem Description
Alice like strings, especially long strings. For each string, she has a special evaluation system to judge how elegant the string is. She defines that a string
S[1..3n2](n2) is one-and-half palindromic if and only if it satisfies S[i]=S[2ni]=S[2n+i2](1in).For example, abcbabc is one-and-half palindromic string, and abccbaabc is not. Now, Alice has generated some long strings. She ask for your help to find how many substrings which is one-and-half palindromic.
 

 

Input
The first line is the number of test cases. For each test case, there is only one line containing a string(the length of strings is less than or equal to
500000), this string only consists of lowercase letters.
 

 

Output
For each test case, output a integer donating the number of one-and-half palindromic substrings.
 

 

Sample Input
1 ababcbabccbaabc
 

 

Sample Output
2
/*************************************************************************    > File Name: A.cpp    > Author: LyuCheng    > Created Time: 2017-12-01 21:54    > Description:         题意:给你一个字符串问你有多少个子串满足s[i]=s[2*n-i]=s[2*n+i-2]        思路:满足条件的子串实际上是关于两点回文的一个子串,并且这个回文串               一定是奇数回文,用马拉车算法求出以每个点的回文半径,如果满足题            目的条件,设i
<=pos[i]&&i-j<=pos[j] 用树状数组记录一下,然后统计 ************************************************************************/#include
#define MAXN 567890#define lowbit(x) x&(-x)#define LL long longusing namespace std;int t;int n;char str[MAXN<<1];char tmp[MAXN<<1];int Len[MAXN<<1];int pos[MAXN<<1];int c[MAXN<<1];LL res;vector
v[MAXN<<1];inline void update(int x){ while(x
0){ s+=c[x]; x-=lowbit(x); } return s;}int cal(char *st){ int i,len=strlen(st); tmp[0]='@';//字符串开头增加一个特殊字符,防止越界 for(i=1;i<=2*len;i+=2){ tmp[i]='#'; tmp[i+1]=st[i/2]; } tmp[2*len+1]='#'; tmp[2*len+2]='$';//字符串结尾加一个字符,防止越界 tmp[2*len+3]=0; return 2*len+1;//返回转换字符串的长度}//Manacher算法计算过程int manacher(char *st,int len){ int mx=0,ans=0,po=0;//mx即为当前计算回文串最右边字符的最大值 for(int i=1;i<=len;i++){ if(mx>i) Len[i]=min(mx-i,Len[2*po-i]);//在Len[j]和mx-i中取个小 else Len[i]=1;//如果i>=mx,要从头开始匹配 while(st[i-Len[i]]==st[i+Len[i]]) Len[i]++; if(Len[i]+i>mx){
//若新计算的回文串右端点位置大于mx,要更新po和mx的值 mx=Len[i]+i; po=i; } ans=max(ans,Len[i]); } return ans-1;//返回Len[i]中的最大值-1即为原串的最长回文子串额长度}inline void init(){ memset(str,'\0',sizeof str); memset(tmp,'\0',sizeof tmp); memset(c,0,sizeof c); memset(pos,0,sizeof pos); for(int i=0;i

 

转载于:https://www.cnblogs.com/wuwangchuxin0924/p/7944832.html

你可能感兴趣的文章
ASP.NET MVC性能优化(实际项目中)
查看>>
ES6里关于类的拓展(一)
查看>>
零元学Expression Blend 4 - Chapter 46 三分钟快速充电-设定Margin的小撇步
查看>>
Format Conditions按条件显示表格记录
查看>>
RichTextBox指定全部文字显示不同颜色及部分文字高亮颜色显示
查看>>
mysql优化----explain的列分析
查看>>
Python正则表达式
查看>>
Java中CAS详解
查看>>
Spring Boot Unregistering JMX-exposed beans on shutdown
查看>>
命令行man的帮助手册
查看>>
Ubuntu 16.04下为Android编译OpenCV 3.2.0 Manager
查看>>
poi 导入导出的api说明(大全)
查看>>
Fix-Mapped Addresses
查看>>
fmt标签如何计算两个日期之间相隔的天数
查看>>
Spark核心技术原理透视一(Spark运行原理)
查看>>
《Gradle权威指南》--Gradle任务
查看>>
IntelliJ IDEA创建文件时自动填入作者时间 定制格式
查看>>
Android app启动activity并调用onCreate()方法时都默默地干了什么?
查看>>
远程监视jboss应用java内存的配置
查看>>
前端如何接收 websocket 发送过来的实时数据
查看>>