Match & Catch】的更多相关文章

题意: 给出两个字符串a,b,求一个字符串,这个字符串是a和b的子串, 且只在a,b中出现一次,要求输出这个字符串的最小长度. 题解: 将a串放入后缀自动机中,然后记录一下每个节点对应的子串出现的次数 然后把b串取自动机中匹配 然后判断一下 #include <set> #include <map> #include <stack> #include <queue> #include <cmath> #include <ctime>…
Codeforces Round #244 (Div. 2) D:http://codeforces.com/contest/427/problem/D 题意:给你两个串,让你找一个最小的串,并且这个串只在每个传中只出现一次. 题解:用后缀数组搞定. 思维过程:一开始想到要用后缀数组,也知道要将两个串拼接起来,然后用H数组,然后判断h[i],i和i-1是否在不同的串,但是如何判断只在一个串中出现一次呢?想了很久,也没有想到什么好的解决办法,最后还是看了题解.题解的一句显然,让我看了很久,最后还是…
题目链接:http://codeforces.com/problemset/problem/427/D 大意是寻找两个字符串中最短的公共子串,要求子串在两个串中都是唯一的. 造一个S#T的串,做后缀数组,从小到大枚举子串长度在height数组中扫描,如果某一个组中来自两个串的数量分别为1,就找到了答案. #include <iostream> #include <vector> #include <algorithm> #include <string> #…
http://codeforces.com/contest/427/problem/D 题目是找出两个串的最短公共子串,并且在两个串中出现的次数只能是1次. 正解好像是dp啥的,但是用sam可以方便很多,复杂度n^2 首先对两个串建立sam,拓扑dp出endpos集合的大小,然后枚举第二个串的所有子串,在两个sam中跑就行了. 很无脑.从[i, j] 递推到[i, j + 1]这个子串,是可以O(1)转移的. #include <bits/stdc++.h> #define IOS ios::…
Police headquarter is monitoring signal on different frequency levels. They have got two suspiciously encoded strings s1 and s2 from two different frequencies as signals. They are suspecting that these two strings are from two different criminals and…
题目 参考:http://blog.csdn.net/xiefubao/article/details/24934617 题意:给两个字符串,求一个最短的子串.使得这个子串在两个字符串中出现的次数都等于1.出现的定义为:可以重叠的出现. 解法:后缀数组的应用.从小枚举长度.如果一个长度len合法的话:则一定存在这个样的sa[i]排名.sa[i]与s[i+1]的公共前缀长度大于等于len,且sa[i]与[i-1]的公共前缀长度小于len,同时sa[i+1]与[i+2]的公共前缀长度小于len,同时…
洛谷题目页面传送门 & CodeForces题目页面传送门 给定\(2\)个字符串\(a,b,|a|=n,|b|=m\),求最长的既在\(a\)中出现恰好\(1\)次又在\(b\)中出现恰好\(1\)次的非空字符串的长度,如果不存在输出\(-1\). \(n,m\in[1,5000]\). emmm,数据范围很不友好,\(\mathrm O(nm)\)带\(\log\)都不行... 考虑枚举\(a\)的子串.枚举子串可以转化为枚举所有后缀的所有前缀,这样一来就有了"前缀"这个东…
后缀数组.... 在两个串中唯一出现的最小公共子串 D. Match & Catch time limit per test 1 second memory limit per test 512 megabytes input standard input output standard output Police headquarter is monitoring signal on different frequency levels. They have got two suspiciou…
D. Match & Catch 能够用各种方法做.字符串hash.后缀数组,dp.拓展kmp,字典树.. . 字符串hash(模板) http://blog.csdn.net/gdujian0119/article/details/6777239 BKDR Hash Function : // BKDR Hash Function unsigned int BKDRHash(char *str) { unsigned int seed = 131; // 31 131 1313 13131 1…
题目来源:CF 427D Match & Catch 题意:给出2个字符串 求最短的连续的公共字符串 而且该字符串在原串中仅仅出现一次 思路:把2个字符串合并起来求height 后缀数组height的应用 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 100010; char s[maxn]; int sa[maxn]…