CF17E Palisection(manacher/回文树)
CF17E Palisection(manacher/回文树)
题解时间
直接正难则反改成求不相交的对数。
manacher求出半径之后就可以差分搞出以某个位置为开头/结尾的回文串个数。
然后就容易求出不相交的对数,用总数减去即为答案。
啊是的这题好像也可以用回文树做。
#include<bits/stdc++.h>
using namespace std;
namespace RKK
{
const int N=4000011,mo=51123987;
void doadd(int &a,int b){if((a+=b)>=mo) a-=mo;}
int add(int a,int b){return (a+=b)>=mo?a-mo:a;}
int n,m;char s[N];
int r[N],mar,mai;
int tot,ls[N],rs[N];
int main()
{
scanf("%d%s",&n,s+1);
s[0]='@';for(int i=n;i;i--)s[i<<1]=s[i],s[(i<<1)-1]='#';s[n<<1|1]='#';m=n<<1|1;
for(int i=1;i<=m;i++)
{
r[i]=i<=mar?min(r[(mai<<1)-i],mar-i+1):1;
while(s[i-r[i]]==s[i+r[i]]) r[i]++;
if(i+r[i]>mar) mar=i+r[i]-1,mai=i;
doadd(tot,r[i]>>1),ls[i-r[i]+1]++,ls[i+1]--,rs[i]++,rs[i+r[i]]--;
}
for(int i=1;i<=m;i++) doadd(ls[i],ls[i-1]),doadd(rs[i],rs[i-1]);
tot=1ll*tot*(tot-1)/2%mo;
for(int i=1,s=0;i<=n;i++) doadd(tot,mo-1ll*s*ls[i<<1]%mo),doadd(s,rs[i<<1]);
printf("%d\n",tot);
return 0;
}
}
int main(){return RKK::main();}
CF17E Palisection(manacher/回文树)的更多相关文章
- CF17E Palisection(回文树)
题意翻译 给定一个长度为n的小写字母串.问你有多少对相交的回文子 串(包含也算相交) . 输入格式 第一行是字符串长度n(1<=n<=2*10^6),第二行字符串 输出格式 相交的回文子串 ...
- 【CF17E】Palisection(回文树)
[CF17E]Palisection(回文树) 题面 洛谷 题解 题意: 求有重叠部分的回文子串对的数量 所谓正难则反 求出所有不重叠的即可 求出以一个位置结束的回文串的数量 和以一个位置为开始的回文 ...
- BZOJ.2565.[国家集训队]最长双回文串(Manacher/回文树)
BZOJ 洛谷 求给定串的最长双回文串. \(n\leq10^5\). Manacher: 记\(R_i\)表示以\(i\)位置为结尾的最长回文串长度,\(L_i\)表示以\(i\)开头的最长回文串长 ...
- CF17E Palisection(回文自动机)
题意翻译 给定一个长度为n的小写字母串.问你有多少对相交的回文子 串(包含也算相交) . 输入格式 第一行是字符串长度n(1<=n<=2*10^6),第二行字符串 输出格式 相交的回文子串 ...
- 【SPOJ】NUMOFPAL - Number of Palindromes(Manacher,回文树)
[SPOJ]NUMOFPAL - Number of Palindromes(Manacher,回文树) 题面 洛谷 求一个串中包含几个回文串 题解 Manacher傻逼题 只是用回文树写写而已.. ...
- CodeForces 17E Palisection(回文树)
E. Palisection time limit per test 2 seconds memory limit per test 128 megabytes input standard inpu ...
- Palisection(Codeforces Beta Round #17E+回文树)
题目链接 传送门 题意 给你一个串串,问你有多少对回文串相交. 思路 由于正着做不太好算答案,那么我们考虑用总的回文对数减去不相交的回文对数. 而不相交的回文对数可以通过计算以\(i\)为右端点的回文 ...
- 回文树/回文自动机(PAM)学习笔记
回文树(也就是回文自动机)实际上是奇偶两棵树,每一个节点代表一个本质不同的回文子串(一棵树上的串长度全部是奇数,另一棵全部是偶数),原串中每一个本质不同的回文子串都在树上出现一次且仅一次. 一个节点的 ...
- 回文树(回文自动机PAM)小结
回文树学习博客:lwfcgz poursoul 边写边更新,大概会把回文树总结在一个博客里吧... 回文树的功能 假设我们有一个串S,S下标从0开始,则回文树能做到如下几点: 1.求串S前缀0~ ...
随机推荐
- python解释器的安装以及解释器多版本共存
版本介绍 python创始人:gukido(龟叔) python1.X 原始版本,几乎不用 python2.x 最高版本2.7(2020年之后不再维护) python3.x 最高版本3.9(一般用3. ...
- Solution -「ZJOI 2020」「洛谷 P6631」序列
\(\mathcal{Description}\) Link. 给定一个长为 \(n\) 的非负整数序列 \(\lang a_n\rang\),你可以进行如下操作: 取 \([l,r]\),将 ...
- Linux爱情故事之如何以不一样的姿势(ssh)进入她的心
文章目录 1.ssh是谁,为什么要进入她的心 2.如何正确的扒拉ssh 2.1.ssh的常用参数 2.2.您配钥匙吗?(ssh生成公钥或者秘钥) 2.3.我要单向畅通无阻的进入你的心(ssh-copy ...
- Java基于ClassLoder/ InputStream 配合读取配置文件
阅读java开源框架源码或者自己开发系统时配置文件是一个不能忽略的,在阅读开源代码的过程中尝尝困惑配置文件是如何被读取到内存中的.配置文件本身只是为系统运行提供参数的支持,个人阅读源码时重点不大可能放 ...
- NSSCTF-gift_pwn
最近才开始接触"pwn"这个东西,这是近两天做的一个题目,然后就想着记一下. 好的,步入正题, 直接nc连接返回空白,然后直接退出,用kali的checksec工具或者是die检测 ...
- 谷歌集群数据 clusterdata-2011-2 Cluster workload traces
谷歌集群数据 clusterdata-2011-2 https://github.com/google/cluster-data/blob/master/ClusterData2011_2.md 链接 ...
- navicat12.0.24安装注意事项
关闭防火墙并断网,或者不要改变安装路径,或者换一个注册机 链接:https://pan.baidu.com/s/1AvEuD6TWGOCisSctF7pcbg 提取码:o4wp
- Qt:QCustomPlot使用教程(一)——安装与配置
0.说明 本节翻译总结自:Qt Plotting Widget QCustomPlot - Setting Up 本节的内容是讲如何配置QCustomPlot,而QCustomPlot的具体用法可以看 ...
- Qt:QVariant
0.说明 QVariant可以表现出Qt数据类型中最普遍的行为. 一个QVariant对象中一次只保留一个type()的单个值(有的type()可以是多值的,例如StringList),可以用conv ...
- MySQL第五讲
内容回顾 单表操作 """ 1.配置文件先统一设置成utf8 \s 2.无论你怎么改都没有生效 你的机器上不止一个mysql文件 C有一个 D有一个 3.百度搜索 sho ...