[HAOI2016]找相同子串】的更多相关文章

[HAOI2016]找相同子串 [题目描述] 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数.两个方案不同当且仅当这两个子串中有一个位置不同. [输入格式] 两行,两个字符串s1,s2,长度分别为n1,n2. [输出格式] 输出一个整数表示答案. [样例输入] aabb bbaa [样例输出] 10 [数据范围] 对于20%的数据,满足1≤n1,n2≤500: 对于40%的数据,满足1≤n1,n2≤5000: 对于100%的数据,满足1≤n1,n2≤200000,字符…
COGS传送门 用SAM重新写了一遍.. 我的方法比较笨,先把两个串连在一起,算出来相同子串个数,同理算出s1和s2的子串个数.作差即可. 至于如何统计子串个数,首先toposort后搞出right集的大小,然后$C_{|right|}^{2} \times (step[i]-step[fa])$就是答案. //BZOJ 4565 //by Cydiater //2017.1.21 #include <iostream> #include <cmath> #include <…
这题感觉有点坑啊. 题目还是不难想的,先对一个字符串建后缀自动机,然后拿另一个字符串在上面跑. 假设当前跑到了p点,匹配长度为len. 那么当前会对答案产生贡献的串是哪些呢? 显然当前会对p及p到根的链产生贡献.这样显然可以用树形dp优化. 同时需要差分(我也不知道这是否是必须的). 下面有update. #include<iostream> #include<cstdio> #include<cstdlib> #include<string> #inclu…
4566: [Haoi2016]找相同字符 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 275  Solved: 155[Submit][Status][Discuss] Description 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数.两个方案不同当且仅当这两 个子串中有一个位置不同. Input 两行,两个字符串s1,s2,长度分别为n1,n2.1 <=n1, n2<= 200000,字符串中只有小写字母…
P3181 [HAOI2016]找相同字符 后缀自动机 (正解应是广义后缀自动机) 并不会广义后缀自动机. 然鹅可以用普通的后缀自动机.   我们先引入一个问题:算出从一个串内取任意两个不重合子串完全相同的方案数. 显然,对于每个点$w$,$tot+=siz[w]*(siz[w]-1)/2*(len[w]-len[fa[w]])$ $siz[w]$表示该点对应子串出现次数 那么答案即为$tot_{a+b}-tot_a-tot_b$ 计算$tot_{a+b}$时在$a,b$间插入一个特殊字符即可.…
[BZOJ4566][HAOI2016]找相同字符 题面 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数.两个方案不同当且仅当这两个子串中有一个位置不同. 其中\(1\leq|s1|,|s2|\leq n\) 题解 其实和这题差不多. 根据后缀数组常用套路,将将\(s1,s2\)用一个未曾出现的字符连起来 和上面那题一样的方法 算出来一个答案 然后减去分别左右两字符串选的贡献就好啦 代码 #include <iostream> #include <cstdio…
4566: [Haoi2016]找相同字符 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1212  Solved: 694[Submit][Status][Discuss] Description 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数.两个方案不同当且仅当这两 个子串中有一个位置不同. Input 两行,两个字符串s1,s2,长度分别为n1,n2.1 <=n1, n2<= 200000,字符串中只有小写字…
[BZOJ4566][Haoi2016]找相同字符 Description 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数.两个方案不同当且仅当这两 个子串中有一个位置不同. Input 两行,两个字符串s1,s2,长度分别为n1,n2.1 <=n1, n2<= 200000,字符串中只有小写字母 Output 输出一个整数表示答案 Sample Input aabb bbaa Sample Output 10 题解:本题跟差异那道题很相似,理论上可以直接一遍sa搞…
4566: [Haoi2016]找相同字符 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 128  Solved: 75[Submit][Status][Discuss] Description 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数.两个方案不同当且仅当这两 个子串中有一个位置不同. Input 两行,两个字符串s1,s2,长度分别为n1,n2.1 <=n1, n2<= 200000,字符串中只有小写字母…
4566: [Haoi2016]找相同字符 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 861  Solved: 495[Submit][Status][Discuss] Description 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数.两个方案不同当且仅当这两 个子串中有一个位置不同. Input 两行,两个字符串s1,s2,长度分别为n1,n2.1 <=n1, n2<= 200000,字符串中只有小写字母…