CF17E Palisection(manacher/回文树)

Luogu

题解时间

直接正难则反改成求不相交的对数。

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/回文树)的更多相关文章

  1. CF17E Palisection(回文树)

    题意翻译 给定一个长度为n的小写字母串.问你有多少对相交的回文子 串(包含也算相交) . 输入格式 第一行是字符串长度n(1<=n<=2*10^6),第二行字符串 输出格式 相交的回文子串 ...

  2. 【CF17E】Palisection(回文树)

    [CF17E]Palisection(回文树) 题面 洛谷 题解 题意: 求有重叠部分的回文子串对的数量 所谓正难则反 求出所有不重叠的即可 求出以一个位置结束的回文串的数量 和以一个位置为开始的回文 ...

  3. BZOJ.2565.[国家集训队]最长双回文串(Manacher/回文树)

    BZOJ 洛谷 求给定串的最长双回文串. \(n\leq10^5\). Manacher: 记\(R_i\)表示以\(i\)位置为结尾的最长回文串长度,\(L_i\)表示以\(i\)开头的最长回文串长 ...

  4. CF17E Palisection(回文自动机)

    题意翻译 给定一个长度为n的小写字母串.问你有多少对相交的回文子 串(包含也算相交) . 输入格式 第一行是字符串长度n(1<=n<=2*10^6),第二行字符串 输出格式 相交的回文子串 ...

  5. 【SPOJ】NUMOFPAL - Number of Palindromes(Manacher,回文树)

    [SPOJ]NUMOFPAL - Number of Palindromes(Manacher,回文树) 题面 洛谷 求一个串中包含几个回文串 题解 Manacher傻逼题 只是用回文树写写而已.. ...

  6. CodeForces 17E Palisection(回文树)

    E. Palisection time limit per test 2 seconds memory limit per test 128 megabytes input standard inpu ...

  7. Palisection(Codeforces Beta Round #17E+回文树)

    题目链接 传送门 题意 给你一个串串,问你有多少对回文串相交. 思路 由于正着做不太好算答案,那么我们考虑用总的回文对数减去不相交的回文对数. 而不相交的回文对数可以通过计算以\(i\)为右端点的回文 ...

  8. 回文树/回文自动机(PAM)学习笔记

    回文树(也就是回文自动机)实际上是奇偶两棵树,每一个节点代表一个本质不同的回文子串(一棵树上的串长度全部是奇数,另一棵全部是偶数),原串中每一个本质不同的回文子串都在树上出现一次且仅一次. 一个节点的 ...

  9. 回文树(回文自动机PAM)小结

    回文树学习博客:lwfcgz    poursoul 边写边更新,大概会把回文树总结在一个博客里吧... 回文树的功能 假设我们有一个串S,S下标从0开始,则回文树能做到如下几点: 1.求串S前缀0~ ...

随机推荐

  1. Diary -「PKUSC 2021」游记

      出游回来自然而然(?)地进入生产低谷的兔子只能写写游记了 qwq. Day -1 实时反馈赛制不是为防止你被数据调戏,而是给你调戏数据的机会. --鲁迅   PKU 一贯的 \(32\) 发提交实 ...

  2. mysql中generated always as的使用

    -- generated always as的使用 CREATE TABLE t1( c1 INT, c2 DOUBLE(20,19) , c3 INT GENERATED ALWAYS AS(c1* ...

  3. 我们一起来学Shell - 初识shell

    文章目录 Shell 的分类 `bash` `csh` `ksh` `tcsh` `sh` `nologin` `zsh` Shell 能做什么 bash 环境变量文件 `/etc/profile` ...

  4. 记一次payload绕过电脑管家免杀

    一.msf命令提示符下generate命令生成1.首先可以使用show payloads命令查看所有的payload,然后使用use命令选中其中一个. 2.使用generate -h查看命令帮助 ge ...

  5. 习惯用excel却满足不了数据分析的需求怎么办?本文给您方法

    Excel 可以说是如今最常用的做分析统计的工具了,简单易用且功能强大,但是excel难以满足一些高端的数据分析需求,主要存在的问题体现在数据共享.数据权限.数据量等方面. 那如果有一款工具既不用你花 ...

  6. 无法打开备份设备,出现操作系统错误 5(拒绝访问)(sql server备份)

    问题:无法打开备份设备 .出现操作系统错误 5(拒绝访问) 原因:你用sqlserver进行备份的时候,必须要是完整的路径,操作sqlserver的和磁盘有关的路径都必须要到文件名这一层. 解决方案: ...

  7. 多个n维向量围成的n维体积的大小

    前言 上周我们数学老师给了我们一道题,大意就是两个向量a和b,一个点M=$x*a+y*b$,x,y有范围,然后所有M组成的面积是一个定值,求x+y的最小值.当然这是道小水题,但我在想,如果把两个向量变 ...

  8. 5.string字符串

    string(字符串)是 Redis 中最简单的数据类型.我们知道,Redis 所有数据类型都是以 key 作为键,通过检索这个 key 就可以获取相应的 value 值.Redis 存在多种数据类型 ...

  9. C语言刷2数/3数/4数之和

    15. 三数之和 /** * Return an array of arrays of size *returnSize. * The sizes of the arrays are returned ...

  10. 在vue项目中MD5加密的使用方法

    1:安装 npm install --save js-md5 2.引入及使用 方法一:在需要的项目文件中引入 import md5 from 'js-md5'; 使用例子:md5('hello wor ...