多校1005 HDU5785 Interesting (manacher)
// 多校1005 HDU5785 Interesting
// 题意:给你一个串,求相邻两个回文串左边端点*右边端点的和
// 思路:马拉车算出最长回文半径,求一个前缀和,既得到每个点对答案的贡献。
// ans=L[i]*R[i-1]
// L[i] 以i开始的所有回文串结尾坐标的和
// R[i] 以i结尾的所有回文串开始坐标的和
// 这题我们关键是求L[] R[]
// 另开两个数组a[] b[] 分别记录当前点对答案贡献 和每个点出现的次数 // #pragma comment(linker, "/STACK:102c000000,102c000000")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <sstream>
#include <string>
#include <algorithm>
#include <list>
#include <map>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <cstdlib>
// #include <conio.h>
using namespace std;
#define clc(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define lson l,mid,rt<<1
// #define rson mid+1,r,rt<<1|1
const int N = 1e6+;
const int MOD = 1e9+;
#define LL long long
#define LB long double
// #define mi() (l+r)>>1
double const pi = acos(-);
const double eps = 1e-;
void fre(){freopen("in.txt","r",stdin);}
inline int read(){int x=,f=;char ch=getchar();while(ch>''||ch<'') {if(ch=='-') f=-;ch=getchar();}while(ch>=''&&ch<='') { x=x*+ch-'';ch=getchar();}return x*f;} char str[N];
char s[N<<];
int Len[N<<];
void Manacher(int n){
clc(s,'#');
for(int i=;i<n;i++)
s[i*+]=str[i];
int len=n*+;s[]='$';
int mx=,po=;
for(int i=;i<=len;i++) {
if(mx>i)
Len[i]=min(Len[po*-i],mx-i);
else Len[i]=;
while(s[i+Len[i]]==s[i-Len[i]]) Len[i]++;
if(i+Len[i]>mx) { mx=i+Len[i];po=i;}
}
} LL a[N<<],b[N<<];
LL L[N],R[N];
int main(){
while(~scanf("%s",str)){
int len=strlen(str);
Manacher(len);
len=(len<<)+;
for(int i=;i<=len;i++) a[i]=,b[i]=;
for(int i=len;i>=;i--){
a[i-Len[i]+]+=i;
a[i+]-=i;
b[i-Len[i]+]++;
b[i+]--;
}
LL a1=,a2=;
for(int i=;i<=len;i++){
a1+=a[i],a2+=b[i];
if(i%==)
L[i/]=(a1-a2*i/)%MOD;
} for(int i=;i<=len;i++) a[i]=,b[i]=;
a1=,a2=;
for(int i=len;i>=;i--){
a[i]+=i;
a[i+Len[i]]-=i;
b[i]++;
b[i+Len[i]]--;
}
for(int i=;i<=len;i++){
a1+=a[i],a2+=b[i];
if(i%==)
R[i/]=(a1-a2*i/)%MOD;
} LL ans=;
for(int i=;i<=len/;i++){
ans=(ans+L[i]*R[i-]%MOD)%MOD;
}
printf("%I64d\n",ans);
}
return ;
}
多校1005 HDU5785 Interesting (manacher)的更多相关文章
- HDU5785 Interesting(Manacher + 延迟标记)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5785 Description Alice get a string S. She think ...
- 【HDU5785】Interesting [Manacher]
Interesting Time Limit: 30 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description Input Outp ...
- HDU-5785 Interesting(Manacher算法+区间处理)
题目大意:给一个字符串,求所有相邻两回文子串的外侧下标之积的和 题目分析:另L[i]为所有以 i 为右端点的回文字串的左端点之和,同理,另R[i]表示所有以 i 为左端点的回文子串的右端点之和.显然, ...
- HDU 4690 EBCDIC (2013多校 1005题 胡搞题)
EBCDIC Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others)Total Su ...
- 2015 多校联赛 ——HDU5371(manacher + 枚举)
Sample Input 1 10 2 3 4 4 3 2 2 3 4 4 Sample Output Case #1: 9 要求找出一段数字. 将其分成3部分,第①和第②部分成回文字串,第②和第 ...
- Interesting (manacher + 前缀和处理)
题意:相邻的两端回文串的价值为两个回文串总的区间左端点 × 区间右端点.然后计算目标串中所有该情况的总和. 思路:首先用manacher求出所有中心点的最大半径,然后我们知道对于左区间我们把贡献记录在 ...
- HDU 5785 Interesting manacher + 延迟标记
题意:给你一个串,若里面有两个相邻的没有交集的回文串的话,设为S[i...j] 和 S[j+1...k],对答案的贡献是i*k,就是左端点的值乘上右端点的值. 首先,如果s[x1....j].s[x2 ...
- python库-collections模块Counter类
Counter类主要是用来跟踪值出现的次数.它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value. demo: all_words = [] # 列表里面是汉字(可 ...
- 多校赛3- Solve this interesting problem 分类: 比赛 2015-07-29 21:01 8人阅读 评论(0) 收藏
H - Solve this interesting problem Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I ...
随机推荐
- SQL Server数据导入导出的几种方法
在涉及到SQL Server编程或是管理时一定会用到数据的导入与导出, 导入导出的方法有多种,结合我在做项目时的经历做一下汇总: 1. SQL Server导入导出向导,这种方式是最方便的. 导入向导 ...
- iOS开发--多线程
前面在<Bison眼中的iOS开发多线程是这样的(二)>一文中讲完了多线程的NSThread,不难发现这种方式的多线程实现起来非常的复杂,为了简化多线程的开发,iOS提供了GCD来实现多线 ...
- lightOJ 1326 Race(第二类Stirling数)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1326 题意:有n匹马赛跑.问有多少种不同的排名结果.可以有多匹马的排名相同. 思路:排 ...
- Android开发之消息机制
转:http://stackvoid.com/introduction-to-Message-Handler-in-Android/ http://blog.dreamtobe.cn/2016/03/ ...
- 【Todo】JS跨域访问问题的解决
做双十一,需要在主会场页面,嵌入我们产品的JS豆腐块.而这个豆腐块需要调用我们后端的数据接口,涉及跨域访问. 参考 http://www.cnblogs.com/2050/p/3191744.html ...
- struts2的@Result annotation 如何添加params
参考: http://struts.apache.org/2.0.11/docs/result-annotation.html http://jdkcn.com/entry/add-params-to ...
- MyBatis 实践 -动态SQL/关联查询
MyBatis 实践 标签: Java与存储 动态SQL 动态SQL提供了对SQL语句的灵活操作,通过表达式进行判断,对SQL进行拼接/组装. if 对查询条件进行判断,如果输入参数不为空才进行查询条 ...
- noip2005提高组题解
05年的题目绝对是自2000年以来难度最大的.后三题的难度系数分别为0.2.0.2.0.3,而前面几年的题目中每年最多只出现一道难度系数为0.2的题目,其难度可见一斑. 强烈推荐这个 PPT,每道题都 ...
- ffmpeg显示视频
项目最近需要实现播放视频功能,这个在上家公司就做过.虽然跟之前的场景不一样,有以前的功底还是很快可以解决,事实也确实如此.在使用DShow处理完视频分割与合并后,继续使用DShow显示视频,很快即完成 ...
- Linux网络相关查询脚本
1. 查看TCP连接状态 netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rnnetstat -n | awk '/^tcp/ {++S[$NF]} ...