problem 给出 \(n\) 个互不包含的字符串,要求你求出一个最短的字符串 \(S\),使得这 \(n\) 个字符串在 \(S\) 中总共至少出现 \(m\) 次,问 \(S\) 最短是多少。 solution 我们首先转化题意: 有 \(n\) 个点,两个点 \(i,j\) 之间的权值为将第 ...
分类:
其他好文 时间:
2020-12-02 11:59:30
阅读次数:
3
bzoj2085 [Poi2010]Hamsters。
矩阵快速幂+字符串hash ...
分类:
其他好文 时间:
2019-09-29 09:36:48
阅读次数:
81
题目描述 Tz养了一群仓鼠,他们都有英文小写的名字,现在Tz想用一个字母序列来表示他们的名字,只要他们的名字是字母序列中的一个子串就算,出现多次可以重复计算。现在Tz想好了要出现多少个名字,请你求出最短的字母序列的长度是多少。n个字符串保证不互相包含。 输入 输入:第一行n(1<=n<=200)和m ...
分类:
其他好文 时间:
2017-08-18 19:50:23
阅读次数:
93
【BZOJ2085】[Poi2010]Hamsters Description Tz养了一群仓鼠,他们都有英文小写的名字,现在Tz想用一个字母序列来表示他们的名字,只要他们的名字是字母序列中的一个子串就算,出现多次可以重复计算。现在Tz想好了要出现多少个名字,请你求出最短的字母序列的长度是多少。 T ...
分类:
其他好文 时间:
2017-08-15 19:58:24
阅读次数:
139
Squats Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Submit Status Description Pasha has many hamsters and he makes them wo ...
分类:
其他好文 时间:
2016-04-23 19:52:41
阅读次数:
185
BZOJ 2085 [Poi2010]Hamsters Hash+倍增floyd...
分类:
其他好文 时间:
2015-08-31 21:46:22
阅读次数:
221
题意:
给出n个长度不大于100000的字符串;
现在要找出一个字符串包括m个这些字符串;
求这个字符串的最小长度;
数据保证字符串不互相包含;
n
题解:
数据保证了字符串没有包含的情况。。
那么为了节约考虑,还是要让字符串叠在一起比较合算;
设f[i][j]表示i后面加个j字符串要再加多少字符;
这个怎么求呢?
Hash之后暴力;
RKhash可以O(1)拿出前...
分类:
其他好文 时间:
2015-08-31 17:21:58
阅读次数:
199
设g[i][j]为i串至少加上几个字符后才能包含j,可以通过Hash求出。然后就是求经过m-1条边的最短路,用倍增加速Floyed即可,时间复杂度$O(n^3\log m)$。#include#include#define rep(i,n) for(int i=0;ib)a=b;}struct ma...
分类:
其他好文 时间:
2015-08-19 19:27:48
阅读次数:
168
题解:
首先我们搞个 ACAC 自动机,然后每个串在 ACAC 自动机上 bfsbfs 求出 f(i,j)f(i,j) 表示串 ii 后面最少接 f(i,j)f(i,j) 个字母能搞出来串 jj 。
然后把每个串当成一个点,倍增 floydfloyd 求两点之间恰好走 mm 步的最短路。
代码:
#include
#include
#include
#include
#includ...
分类:
其他好文 时间:
2015-05-15 20:03:13
阅读次数:
232
题目大意:给定n个长度总和不超过10W的字符串,求一个最短的母串,使所有字符串的出现次数之和=m 这n个字符串保证不互相包含
TM能不能好好翻译了
令f[i][j]表示第i个字符串后面接上第j个字符串后会增加多少长度
由于j一定不是i的子串,因此这实际上就是在求i的最长的后缀,该后缀同时也是j的前缀
注意不能连出长度为0的边,因此当i=j时要保证这个长度
怎么求呢?其实Hash一下,枚举...
分类:
其他好文 时间:
2015-03-05 09:19:27
阅读次数:
127