博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[洛谷P3181][HAOI2016]找相同字符
阅读量:6894 次
发布时间:2019-06-27

本文共 1580 字,大约阅读时间需要 5 分钟。

题目大意:给你两个字符串,求从两个字符串中各选择一个字串使得这两个字串相同的方案数。

题解:建广义$SAM$,对每个点求出在第一个串中出现次数和第二个串中出现次数,乘起来就行了

卡点:

 

C++ Code:

#include 
#include
#include
#define maxn 200010namespace SAM {#define N (maxn << 2) int R[N], nxt[N][26], fail[N]; int lst = 1, idx = 1, sz[N][2]; void append(char __ch, int op) { int ch = __ch - 'a'; int p = lst, np = lst = ++idx; R[np] = R[p] + 1; sz[np][op] = 1; for (; p && !nxt[p][ch]; p = fail[p]) nxt[p][ch] = np; if (!p) fail[np] = 1; else { int q = nxt[p][ch]; if (R[q] + 1 == R[p]) fail[np] = q; else { int nq = ++idx; fail[nq] = fail[q], R[nq] = R[p] + 1, fail[q] = fail[np] = nq; std::copy(nxt[q], nxt[q] + 26, nxt[nq]); for (; p && nxt[p][ch] == q; p = fail[p]) nxt[p][ch] = nq; } } } int head[N], cnt; struct Edge { int to, nxt; } e[N]; inline void addedge(int a, int b) { e[++cnt] = (Edge) {b, head[a]}; head[a] = cnt; } long long ans; void dfs(int u) { for (int i = head[u]; i; i = e[i].nxt) { int v = e[i].to; dfs(v); sz[u][0] += sz[v][0], sz[u][1] += sz[v][1]; ans += static_cast
(R[v] - R[u]) * sz[v][0] * sz[v][1]; } } long long work() { for (int i = 2; i <= idx; i++) addedge(fail[i], i); dfs(1); return ans; }#undef N}int n;char s[maxn];int main() { scanf("%s", s); n = strlen(s); for (int i = 0; i < n; i++) SAM::append(s[i], 0); scanf("%s", s); n = strlen(s); SAM::lst = 1; for (int i = 0; i < n; i++) SAM::append(s[i], 1); printf("%lld\n", SAM::work()); return 0;}

  

转载于:https://www.cnblogs.com/Memory-of-winter/p/10162210.html

你可能感兴趣的文章
通用XPE操作系统
查看>>
Opentracing Zipkin
查看>>
构建高可用服务器之四 Keepalive冗余Nginx
查看>>
android音频采集
查看>>
SHELL控制流结构笔记
查看>>
路由重分布新技术实现多种路由协议不同网络间通信案例实操应用
查看>>
打印机无法打印测试页
查看>>
【图文详解】Iptables
查看>>
Zabbix-web的中文显示及其乱码问题解决方法
查看>>
Gluster管理命令的总结与归纳
查看>>
FreeNAS如何配置LACP(链路聚合和故障)
查看>>
AJAX 学习笔记[三] get 与post 模式的区别
查看>>
MES技术
查看>>
GO语言练习:网络编程 ICMP 示例
查看>>
ios11--UIButton
查看>>
阿里云海外征战记:跻身全球前三,只用了两年半
查看>>
解密回声消除技术之二(应用篇)
查看>>
Go语言的web程序写法
查看>>
IDF2011:基于SaaS模式的"教学云"案例
查看>>
《Linux From Scratch》第三部分:构建LFS系统 第七章:基本系统配置- 7.5. 配置系统时间...
查看>>