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 ...
随机推荐
- Mysql备份与还原实例
一.备份数据库 ----清空一下日志 mysql> reset master; Query OK, rows affected (0.02 sec) ----查看一下echo表的存储引擎 mys ...
- jquery easyui常见问题:
1.jquery easyui1.4.2 demo在ie10 上加载json的时候没有效果 从官网上下载了jquery easyui1.4.2 里面有个demo文件夹,但是发现底下的demo在IE.3 ...
- java面试每日一题12
题目:打印出如下图案(菱形) * *** ****** ******** ****** *** * public class Diamond { public static ...
- JavaScript脚本语言基础(一)
导读: JavaScript代码嵌入HTML文档 JavaScript代码运行方式 第一个实例 JavaScript的三种对话框 定义JavaScript变量 JavaScript运算符和操作符 Ja ...
- C语言的数组名和对数组名取地址
http://blog.csdn.net/zdcsky123/article/details/6517811 相信不少的C语言初学者都知道,数组名相当于指针,指向数组的首地址,而函数名相当于函数指针, ...
- 在Windows Live Writer中插入C# code
平时都是用Windows Live Writer写博客,发布博客.遇到需要插入代码都是先在notepad中写好,或者是拷贝到notepad,再从notepad中拷到Windows Live Write ...
- 安装python-devel 在升级到python2.7之后
分别执行如下命令: # yum update # yum install centos-release-SCL # yum search all python27 在搜索出的列表中发现python27 ...
- Bean的生命周期
Bean的生命周期 原文:http://997004049-qq-com.iteye.com/blog/1729793 任何一个事物都有自己的生命周期,生命的开始.生命中.生命结束.大家最熟悉的应该是 ...
- Kernel启动时 驱动是如何加载的module_init,加载的次序如何;略见本文
Init.h中有相关initcall的启动次序,在system.map中可看出具体的__initcall指针的前后次序 #define pure_initcall(fn) __define_initc ...
- [转]get,post数据长度的限制
一.问题起因 在某项目释放后Bug统计的附件<释放后问题>里有: 问题 原因 分析 备注 CSV处理时,如果处理的主题数过多,发生URL参数上限的错误: 可变长度的参数通过URL方式传递, ...