Tsinsen Palisection
建回文树。
正反建统计一种前缀和求出所有不相交的,用总数减去就是答案数。
在这里我们可以知道一个字符串中所有回文串的个数即为num数组之和(因为以一个节点为回文串结尾的字串都是唯一的)
也可以是cnt数组的和(想想看为什么)
题目链接:http://www.tsinsen.com/ViewGProblem.page?gpid=A1393
来源是Codeforces17E,但这样会MLE所以可以使用Vector替代next数组(时间换空间)这里不给出代码。
By:大奕哥
#include<bits/stdc++.h>
using namespace std;
const int N=2e6+;
const int mod=;
const int M=;
struct node
{
int num[N],cnt[N],nex[N][M],fail[N],S[N],len[N];
int n,p,last;
int newnode(int l)
{
for(int i=;i<M;++i)nex[p][i]=;
cnt[p]=num[p]=;
len[p]=l;
return p++;
}
void init()
{
p=;n=;
newnode();newnode(-);
last=n=;
S[n]=-;fail[]=;
}
int getfail(int x)
{
while(S[n-len[x]-]!=S[n])x=fail[x];
return x;
}
int add(int c)
{
c=c-'a';
S[++n]=c;
int cur=getfail(last);
if(!nex[cur][c])
{
int now=newnode(len[cur]+);
fail[now]=nex[getfail(fail[cur])][c];
nex[cur][c]=now;
num[now]=num[fail[now]]+;
}
last=nex[cur][c];
cnt[last]++;
return num[last];
}
void count()
{
for(int i=p-;i>=;--i)cnt[fail[i]]+=cnt[i];
}
}T;
char s[N];
int ll[N],rr[N];
int main()
{
int n;long long sum=,ans=;
scanf("%d%s",&n,s);
T.init();
for(int i=n-;i>=;--i)
{
ll[i]=(T.add(s[i])+ll[i+])%mod;
}
T.init();
for(int i=;i<n;++i)
{
rr[i]=T.add(s[i]);sum+=rr[i];sum%=mod;
ans=(ans+1ll*ll[i+]*rr[i]%mod)%mod;
}
ans=(1ll*sum*(sum-)/%mod-ans+mod)%mod;
printf("%lld\n",ans);
return ;
}
Ps:随时注意取模。。。
Tsinsen Palisection的更多相关文章
- Tsinsen A1493 城市规划(DP + CDQ分治 + NTT)
题目 Source http://www.tsinsen.com/A1493 Description 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了. 刚才说过, 阿狸的国家有n个城市, 现在 ...
- 【Tsinsen】【A1365】森林旅店
KD-Tree 啊哈~检验了一下自己KD-Tree的学习情况,还算可以,模板至少是记下来了. 支持插入(所以要带重建),查询最近的P个点的距离. 然而题目并没有说是按怎样的顺序输出这P个点?...(事 ...
- Tsinsen A1219. 采矿(陈许旻) (树链剖分,线段树 + DP)
[题目链接] http://www.tsinsen.com/A1219 [题意] 给定一棵树,a[u][i]代表u结点分配i人的收益,可以随时改变a[u],查询(u,v)代表在u子树的所有节点,在u- ...
- Tsinsen A1303. tree(伍一鸣) (LCT+处理标记)
[题目链接] http://www.tsinsen.com/A1303 [题意] 给定一棵树,提供树上路径乘/加一个数,加边断边,查询路径和的操作. [思路] LCT+传标 一次dfs构造LCT. L ...
- Tsinsen A1516. fx 数位dp
题目: http://www.tsinsen.com/A1516 A1516. fx 时间限制:2.0s 内存限制:256.0MB 总提交次数:164 AC次数:72 平均分:51. ...
- Tsinsen A1517. 动态树 树链剖分,线段树,子树操作
题目 : http://www.tsinsen.com/A1517 A1517. 动态树 时间限制:3.0s 内存限制:1.0GB 总提交次数:227 AC次数:67 平均分:49. ...
- Tsinsen A1505. 树(张闻涛) 倍增LCA,可持久化线段树,DFS序
题目:http://www.tsinsen.com/A1505 A1505. 树(张闻涛) 时间限制:1.0s 内存限制:512.0MB 总提交次数:196 AC次数:65 平均分: ...
- Tsinsen A1504. Book(王迪) 数论,贪心
题目:http://www.tsinsen.com/A1504 A1504. Book(王迪) 时间限制:1.0s 内存限制:256.0MB Special Judge 总提交次数:359 ...
- Tsinsen A1333: 矩阵乘法(整体二分)
http://www.tsinsen.com/A1333 题意:-- 思路:和之前的第k小几乎一样,只不过把一维BIT换成二维BIT而已.注意二维BIT写法QAQ #include <cstdi ...
随机推荐
- MagicB.0—怎样设置电脑自动关机?
天太晚了,该睡觉了,可是你的东西也许正在下载,软件正在更新,总之电脑还有一些工作没有完成,又不需要你人为的守着,随他去吧!可是电脑已经工作了一天了,它也要休息一下,再者也不能浪费电力资源呀,那么就来使 ...
- 【总结】对FFT的理解 / 【洛谷 P3803】 【模板】多项式乘法(FFT)
题目链接 \(\Huge\text{无图,慎入}\) \(FFT\)即快速傅里叶变换,用于加速多项式乘法. 如果暴力做卷积的话就是一个多项式的每个单项式去乘另一个多项式然后加起来,时间复杂度为\(O( ...
- Oracle笔记之约束
约束用于保证数据库中某些数据的完整性,给某一列添加一个约束可以保证不满足约束的数据是绝对不会被接受的. 约束主要有那么五种类型:非空约束.唯一约束.主键约束.外键约束.校验约束. 使用如下命令检索某个 ...
- zedboard学习记录.1.纯PL流水灯
环境:vivado 217.4 开发板: zedboard ver.d xc7z020clg484-1 1.打开Vivado新建一个RTL工程. 2.add source->add/create ...
- bootstrap入门项目备份
bootstrap入门项目备份 http://files.cnblogs.com/files/wordblog/bootstrap%E5%85%A5%E9%97%A8%E9%A1%B9%E7%9B%A ...
- python中随机数生成
1.random.random random.random()用于生成一个0到1的随机符小数: 0 <= n < 1.0 2.random.uniform random.uniform的函 ...
- NASA: Seeing Jupiter(注视木星)
This image of Jupiter’s southern hemisphere was captured by NASA’s Juno spacecraft on the outbound l ...
- 导航狗IT周报第十五期(July 8, 2018)
摘要:Seclists.Org: 微信支付SDK存在XXE漏洞:WordPress 4.9.6存在文件删除漏洞:linux中常用的文件打包/解包与压缩/解压缩命令总结… 安全播报 Seclists.O ...
- 【bzoj5050】【bzoj九月月赛H】建造摩天楼
讲个笑话,这个题很休闲的. 大概是这样的,昨天看到这个题,第一眼星际把题目看反了然后感觉这是个傻逼题. 后来发现不对,这个修改一次的影响是很多的,可能导致一个数突然可以被改,也可能导致一个数不能被改. ...
- html的loadrunner脚本2
Action(){ char buf[1911]; //¶¨Òå×Ö·ûÊý×飬Ö÷ÒªÓÃÓÚдÈëXML±¨Îĵ½»º³åÇø char str_Body[4086]; //³Ð½Ó±¨Î ...