其实每个串都不是回文串也能做的说。。。

题意:给定 \(n\) 个互不相同的串,两两拼接一共能够拼出 \(n^2\) 个串,问这 \(n^2\) 个串中有几个回文串。

首先假设拼接出来的串是 \(AB\),且 \(A\) 的长度大于 \(B\) 的长度。

\(AB\) 是回文串,那么回文中心一定在 \(A\) 上,那么就说明 \(B\) 的反串一定是 \(A\) 的前缀。将 \(A\) 去掉这个前缀后,剩下的后缀一定也是回文串。

然后问题就变成了了询问有多少个串是一个串的前缀,以及一个串的后缀是否是回文串。前者用 Trie,后者用 Hash 就好了。

每个串都是回文串只是方便了处理而已,处理后缀是否为回文串相当于处理前缀是否为回文串。

不懂为什么是紫题。。。

#include<algorithm>
#include<cstdio>
typedef unsigned ui;
const ui M=2e6+5,mod=998244353;
ui n,m,mx,tot(1),p[M],len[M],cnt[M],chi[M][26];char s[M],*S[M];bool Vis[M],*vis[M];long long ans;
inline void Insert(char*s,const ui&len){
ui i,now(1);
for(i=0;i^len;++i)!chi[now][s[i]-97]&&(chi[now][s[i]-97]=++tot),now=chi[now][s[i]-97];++cnt[now];
}
inline void Match(char*s,const ui&id,const ui&len){
ui i,now(1);
for(i=0;i^len;++i)cnt[now]&&vis[id][len-i-1]&&(ans+=cnt[now]),now=chi[now][s[i]-97];
}
signed main(){
ui i,j,h1,h2;scanf("%u",&m);S[1]=s;vis[1]=Vis;p[0]=1;
for(i=1;i<=m;++i)scanf("%u%s",len+i,S[i]),S[i+1]=S[i]+len[i],Insert(S[i],len[i]),len[i]>mx&&(mx=len[i]);
for(i=1;i^mx;++i)p[i]=13331ull*p[i-1]%mod;
for(j=1;j<=m;++j){
vis[j+1]=vis[j]+len[j];h1=h2=0;
for(i=0;i^len[j];++i)h1=(1ull*p[1]*h1+(S[j][i]-97))%mod,h2=(h2+1ull*p[i]*(S[j][i]-97))%mod,vis[j][i]=h1==h2;
}
for(i=1;i<=m;++i)Match(S[i],i,len[i]);printf("%lld",(ans<<1)+m);
}

LGP3449题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. sublime中的emmet插件的使用技巧

    1.我要生成一个2行3列,宽300px,高500px的表. table[width=300 height=500]>(tr>td{$}*3)*2

  2. Java线程--CompletionService使用

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11871911.html Java线程--CompletionService使用 public ...

  3. iOS 小技巧总结

    1.获取准确的app启动所需时间 应用启动时间长短对用户第一次体验至关重要,同时系统对应用的启动.恢复等状态的运行时间也有严格要求,在应用超时的情况下系统会直接关闭应用.以下是几个常见场景下系统对Ap ...

  4. 私有化轻量级持续集成部署方案--03-部署web服务(上)

    提示:本系列笔记全部存在于 Github, 可以直接在 Github 查看全部笔记 这一篇主要讲述部署一个 Web 项目,项目是我曾经搞的一个 VUE 模板项目:https://github.com/ ...

  5. HMS Core携手厦门大学打造AR增强现实技术

    HMS Core AR Engine团队联手厦门大学信息学院,与专业学生面对面深度交流行业发展与前沿成果.双方共同编写行业知识教材,引导学生开发AR游戏实践,为未来AR.VR人才培养培育可复制的教学模 ...

  6. LRU缓存及实现

    一.淘汰策略 缓存:缓存作为一种平衡高速设备与低速设备读写速度之间差异而引入的中间层,利用的是局部性原理.比如一条数据在刚被访问过只有就很可能再次被访问到,因此将其暂存到内存中的缓存中,下次访问不用读 ...

  7. C#设置进程PATH环境变量值解决某些Win32DLL找不到路径问题

    C#.NET通过设置当前进程PATH环境变量值解决某些Win32DLL找不到路径问题 以下函数设置PATH环境变量值(请注意:该环境变量为当前进程的环境变量,非系统环境变量)用于解决在调用某些Win3 ...

  8. python-xlutils模块-修改excel

    前言 xlrd库用于读取excel文件中的数据,xlwt库用于将数据写入excel文件,修改用xlutils模块: xlutils库也仅仅是通过复制一个副本进行操作后保存一个新文件,像是xlrd库和x ...

  9. [文档]运维故障报告template

    RCA的基本概念 根本原因分析技术(root cause analysis,RCA). IOWA州立大学质量管理学院认为,很多公司在设备发生故障后,都能够很快修复, 但难以发现故障的根本原因,所以此故 ...

  10. [旧][Android] ButterKnifeProcessor 工作流程分析

    备注 原发表于2016.05.21,资料已过时,仅作备份,谨慎参考 前言 在 [Android] ButterKnife 浅析 中,我们了解了 ButterKnife 的用法,比较简单. 本次文章我们 ...