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~ ...
随机推荐
- Note -「Mobius 反演」光速入门
目录 Preface 数论函数 积性函数 Dirichlet 卷积 Dirichlet 卷积中的特殊函数 Mobius 函数 & Mobius 反演 Mobius 函数 Mobius 反演 基 ...
- 最新版的Dubbo Admin 3.0 本地启动方式
项目下载 项目地址:https://github.com/apache/dubbo-admin 如下图,使用git地址直接构建或者下载zip包构建源码都可以,我用的是下载的zip包, 项目架构说明 d ...
- Solon 1.6.25 发布,轻量级应用开发框架
关于官网 千呼万唤始出来: https://solon.noear.org .整了一个月多了...还得不断接着整! 关于 Solon Solon 是一个轻量级应用开发框架.支持 Web.Data.Jo ...
- io流复习+代码演示
前置知识: 序列化和反序列化 1.序列化就是在保存数据时, 保存数据的值和数据类型 2.反序列化就是在恢复数据时, 恢复数据的值和数据类型 3.需要让某个对象支持序列化机制,则必须让其类是可序列化的, ...
- Android SugarORM(1)
Android Sugar ORM (1) Android Sugar ORM比我之前用过的ORM都要简单许多, 其目的是简化与Android中SQLite数据库的交互, 优点如下: 消除了编写SQL ...
- 基于 Kafka 的实时数仓在搜索的实践应用
一.概述 Apache Kafka 发展至今,已经是一个很成熟的消息队列组件了,也是大数据生态圈中不可或缺的一员.Apache Kafka 社区非常的活跃,通过社区成员不断的贡献代码和迭代项目,使得 ...
- HTTP攻击与防范-跨站攻击-01简介
实验目的 1.掌握WEB渗透测试跨站攻击原理 2.了解WEB站点的跨站攻击脆弱性 3.修复存在跨站攻击可能的漏洞 实验原理 XSS又叫CSS (Cross Site script) ,跨站脚本攻击.它 ...
- [题解]UVA11027 Palindromic Permutation
链接:http://vjudge.net/problem/viewProblem.action?id=19602 描述:给出一个字符串,求重新排列后第n个回文串,若没有则输出"XXX&quo ...
- RFC2889错误帧过滤测试----网络测试仪实操
一.简介 RFC 2889为LAN交换设备的基准测试提供了方法学,它将RFC 2544中为网络互联设备基准测试所定义的方法学扩展到了交换设备,提供了交换机转发性能(Forwarding Perform ...
- 【c# 操作符】- nameof用法
最重要的是nameof不会影响性能! nameof有什么用?主要用解决 类成员名做参数替代成员们的字符串做参数,如下: using System; namespace csharp6 { intern ...