首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
bzoj2085
】的更多相关文章
bzoj2085
首先看到k的范围就该知道这题不是倍增就是矩乘 首先肯定要求出任意一对串(a,b) a的后缀与b的前缀相同的最长长度是多少 考虑到kmp求出的失配指针是一个串最长后缀和前缀相等的长度 这里多个串我们只要用ac自动机即可 具体的,我们只要建立自动机,然后记录每个状态点是哪些串的子串 然后我们只要从每个串的结尾节点出发,顺着失配指针统计即可 然后我们把每个串看作一个点,点之间的边长度就是虽代表串的后缀前缀相同的最长长度 这个问题等价于求经过k条边的最短长度,倍增轻松搞定 *; type node=re…
BZOJ2085 : [Poi2010]Hamsters
设g[i][j]为i串至少加上几个字符后才能包含j,可以通过Hash求出. 然后就是求经过m-1条边的最短路,用倍增加速Floyed即可,时间复杂度$O(n^3\log m)$. #include<cstdio> #include<cstring> #define rep(i,n) for(int i=0;i<n;i++) typedef long long ll; typedef unsigned int U; const int N=200,M=100010,P=31;…
【bzoj2085】[Poi2010]Hamsters Hash+倍增Floyd
题目描述 Tz养了一群仓鼠,他们都有英文小写的名字,现在Tz想用一个字母序列来表示他们的名字,只要他们的名字是字母序列中的一个子串就算,出现多次可以重复计算.现在Tz想好了要出现多少个名字,请你求出最短的字母序列的长度是多少.n个字符串保证不互相包含. 输入 输入:第一行n(1<=n<=200)和m(1<=m<=10的9此方),n表示有多少个仓鼠,m表示Tz希望出现名字的次数,接下来n行,每行都是仓鼠的名字(中间没有空格). 输出 输出:一行,最短的字母序列的长度. 样例输入 4…
bzoj2085 [Poi2010]Hamsters 矩阵快速幂+字符串hash
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2085 题解 考虑暴力 DP 的做法.令 \(dp[i][j]\) 表示以 \(j\) 为开头的子串,并且已经总共出现 \(i\) 次的最小长度. \[ dp[i][j] = \min_{k=1}^n\{dp[i-1][k] + len_j - LC(j, k) \} \] 其中 \(LC(j, k)\) 表示最长的 \(j\) 的后缀等于 \(k\) 的前缀. 然后这个东西可以用矩阵来加速.…
BZOJ 2085 [POI2010] Hamsters
题面 Description Tz养了一群仓鼠,他们都有英文小写的名字,现在Tz想用一个字母序列来表示他们的名字,只要他们的名字是字母序列中的一个子串就算,出现多次可以重复计算.现在Tz想好了要出现多少个名字,请你求出最短的字母序列的长度是多少. Input 输入:第一行n(1<=n<=200)和m(1<=m<=10的9此方),n表示有多少个仓鼠,m表示Tz希望出现名字的次数,接下来n行,每行都是仓鼠的名字(中间没有空格). Output 输出:一行,最短的字母序列的长度. Sam…
倍增&矩阵乘法 专题复习
倍增&矩阵乘法 专题复习 PreWords 这两个基础算法我就不多说啦,但是还是要介绍一下" 广义矩阵 "乘法 其实就是把矩阵换成取\(max\),然后都一样... 据神仙LBC说:这不显然是对的吗! \[ \ \] \[ \ \] [usaco2007 Nov] relays 奶牛接力跑 离散一下,然后套矩阵乘法\(a[i][j]\)记录从\(i\)出发到\(j\)的最小答案,快速幂即可 const int N=410,P=1e4+7; int n,m,s,t; int a[…