HDU5785 manacher+差分数组
用manacher算法O(n)求出所有的回文半径。有了回文半径后,就可以求出L[i]表示以i结尾的回文串的起始位置的和R[i]表示以i起始的回文串的结尾位置的和,然后就可以求出答案了,这里要注意奇偶长度回文串的不同处理。复杂度O(n)
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+;
typedef long long ll;
const int mod = 1e9+;
int n,m,i,r,p,f[N<<]; char a[N],s[N<<];
ll L[N], R[N];
void add(ll& a, ll b){
a += b;
if(a >= mod||a <= -mod) a %= mod;
}
int main(){
while(~scanf("%s", a+)){
n = strlen(a+);
for(i = ; i <= n; i++) s[i<<] = a[i], s[i<<|] = '#';
s[] = '$', s[] = '#', s[m = (n+)<<] = '@';
for(r=p=,f[]=,i=;i<m;i++){
for(f[i]=r>i?min(r-i,f[p*-i]):;s[i-f[i]]==s[i+f[i]];f[i]++);
if(i+f[i]>r)r=i+f[i],p=i;
} memset(L, , sizeof(ll)*(n+));
memset(R, , sizeof(ll)*(n+));
for(i=;i<=*n; i++){
int ret = f[i]-, pos = i/;
if(ret == ) continue ;
ret /= ;
if(i&){
//[pos+1, pos+rer/2]
add(L[pos+], pos), add(L[pos+], --pos), add(L[pos+ret+], ret-pos), add(L[pos+ret+], pos+-ret);
//[pos-ret/2+1, pos]
add(R[pos-ret+], pos+ret), add(R[pos-ret+], --pos-ret), add(R[pos+], -pos), add(R[pos+], pos+);
}else{
//[pos, pos+ret/2]
add(L[pos], pos), add(L[pos+], --pos), add(L[pos+ret+], ret-pos+), add(L[pos+ret+], pos-ret);
//[pos-ret/2, pos]
add(R[pos-ret], pos+ret), add(R[pos-ret+], --pos-ret), add(R[pos+], -pos), add(R[pos+], pos);
}
}
for(i=; i<=n;i++)
add(L[i], L[i-]), add(R[i], R[i-]);
for(i=; i<=n;i++)
add(L[i], L[i-]), add(R[i], R[i-]);
ll ans = ;
for(i=;i<n;i++){
ans += L[i]*R[i+];
if(ans >= mod||ans <= -mod)
ans %= mod;
}
cout << (ans+mod)%mod << endl;
}
return ;
}
HDU5785 manacher+差分数组的更多相关文章
- [NOIP2015]运输计划 D2 T3 LCA+二分答案+差分数组
[NOIP2015]运输计划 D2 T3 Description 公元2044年,人类进入了宇宙纪元. L国有n个星球,还有n-1条双向航道,每条航道建立在两个星球之间,这n-1条航道连通了L国的所有 ...
- 洛谷P3655 差分数组 树状数组
题目链接:https://www.luogu.org/problemnew/show/P3655 不一定对,仅供参考,不喜勿喷,不喜勿喷. 先copy洛谷P3368 [模板]树状数组 2 题解里面一位 ...
- Karen and Coffee CodeForces - 816B (差分数组+预处理前缀和)
To stay woke and attentive during classes, Karen needs some coffee! Karen, a coffee aficionado, want ...
- 牛客网小白月赛5I区间(差分数组)
链接:https://www.nowcoder.com/acm/contest/135/I来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 32768K,其他语言65536 ...
- Codeforces Round #419 (Div. 2)(B)差分数组
传送门:Problem B https://www.cnblogs.com/violet-acmer/p/9721160.html 题意: Karen有n个关于煮咖啡的食谱,每个食谱都有个煮咖啡的最适 ...
- 差分数组|小a的轰炸游戏-牛客317E
小a的轰炸游戏 题目链接:https://ac.nowcoder.com/acm/contest/317/E 思路 这题考查的是对差分数组原理和前缀和的理解. 四个数组分别记录朝着四个方向下放的个数 ...
- Gym 101775J Straight Master(差分数组)题解
题意:给你n个高度,再给你1~n每种高度的数量,已知高度连续的3~5个能消去,问你所给的情况能否全部消去:例:n = 4,给出序列1 2 2 1表示高度1的1个,高度2的2个,高度3的2个,高度4的1 ...
- Educational Codeforces Round 54 E. Vasya and a Tree(树上差分数组)
https://codeforces.com/contest/1076/problem/E 题意 给一棵树(n<=3e5),m(3e5)次查询,每次查询u,d,x,表示在u的子树中,给距离u&l ...
- 洛谷 U14472 数据结构【比赛】 【差分数组 + 前缀和】
题目描述 蒟蒻Edt把这个问题交给了你 ---- 一个精通数据结构的大犇,由于是第一题,这个题没那么难.. edt 现在对于题目进行了如下的简化: 最开始的数组每个元素都是0 给出nnn,optopt ...
随机推荐
- Hadoop之回收站
一.回收站简介: 在HDFS里,删除文件时,不会真正的删除,其实是放入回收站/trash,回收站里的文件可以快速恢复. 可以设置一个时间阀值,当回收站里文件的存放时间超过这个阀值或是回收站被清空时,文 ...
- HDU 4712:Hamming Distance
Hamming Distance Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) ...
- pandas安装过程中提示unable to find vcvarsall.bat的解决方法
转载自:http://blog.csdn.net/qq_21144699/article/details/46849561 为这位老兄点赞 原帖参考:http://stackoverflow.com/ ...
- 2016年10月21日 星期五 --出埃及记 Exodus 19:5
2016年10月21日 星期五 --出埃及记 Exodus 19:5 Now if you obey me fully and keep my covenant, then out of all na ...
- IMetadataAware接口的特性定制Model元数据
第一步创建元数据类 using System; using System.Collections.Generic; using System.Linq; using System.Reflection ...
- zookeeper系列之二—zookeeper历史
Zookeeper是什么? Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby的一个开源版本.它是为分布式应用提供一致性服务的软件,提供的功能包括:配置服 ...
- SqlSever基础 top 后面的n 由一个简单的计算式子计算得出
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- 【leetcode❤python】263. Ugly Number
class Solution(object): def isUgly(self, num): if num<=0:return False comlist=[2 ...
- shell 标出输入、标准输出、错误输出
shell中可能经常能看到:>/dev/null 2>&1 eg:sudo kill -9 `ps -elf |grep -v grep|grep $1|awk '{print ...
- [HDOJ5787]K-wolf Number(数位DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5787 题意:求[L,R]区间内的数字,使得所有长度为k的子数列内所有数位都不同. K<=5的所以 ...