字符串:hash
文章平均质量分 91
ProLightsfxjh
这个作者很懒,什么都没留下…
展开
-
URAL - 1486 Equal Squares 哈希、二维hash、二分、卡大素数
题意:给出n个长度为m的字符串(n,m <= 500),然后问选取一个最大的正方形,使得有2个正方形区域的字符串是相同的,求出这个最大正方形的边长即两次出现位置的正方形左上角坐标。 哈希、二维hash、二分、卡大素数 题目直接就暗示着用哈希来做 ^_^, 然后可以把每个字符串分别用同一个大素数hash掉, 然后二分边长, check的时候,检查每个长度为mid的正方形是否再次出现, 检查的时候再去另一个大素数pt,把横向的第一次哈希得到的一段字符串的哈希值作为一个元素,把这些元素再次进行哈希, 然后在纵向的原创 2017-03-12 15:10:28 · 1243 阅读 · 0 评论 -
Opencup 010352 Problem 5. Autocomplete 哈希+bitset
题意:定义2个字符串如果忽略大小写则完全相同,如果区分大小写则只有不大于k个位置不同,则认为这2个字符串是“相似的”。给出w个(1<=w<=1000)个长度小于2000的模式串,然后q次询问(1<=q<=1000),每次输入一个长度小于2000的字符串问在那n个模式串中有多少个与其互为“相似的”。 哈希+bitset 这里2e6*(26+26)的复杂度,所以AC自动机基本上直接用不上了,如果只存小写,则虽然勉强够内存,但其实还是很可能会MLE的,并且也解决不了问题。 所以想到用哈希, 首先对于每个模式串在不原创 2017-05-30 20:27:45 · 1307 阅读 · 0 评论 -
UESTC 1703 一道更简单的字符串题 哈希+枚举
求出最小循环串。 哈希+枚举 先把字符串哈希, 然后从ans = 1 ~ n进行枚举, check的时候枚举每个hash(i, ans) == hash(0, ans), 且对于最后一段长度不到ans的 hash(i, len-i) == hash(0, len-i), 因为是从小到大枚举,所以一旦有ans满足,则就是答案。 这是一个调和级数,故nlin(n)。 时间复杂度 O(nlin(n)) 空间复杂度 O(n)原创 2017-07-18 21:56:21 · 1402 阅读 · 0 评论 -
UESTC 1705 咸鱼钟大爷 随机化+哈希
题意:给出一个p和mod,求出一对哈希冲突的字符串(长度可以不同) 随机化+哈希 随机生成字符串,然后哈希,然后判断f[hashval]是否出现过,如果出现过就找到了哈希冲突的字符串。 如果枚举到MAXN还是没有找到就换一个哈希种子重新找,这里由于oj把ctime禁用了, 所以可以每次定义一个变量,然后用这个变量的地址作为哈希种子。 关于可以使用随机化的原因,请搜索“生日攻击”百科,里面有详细证明。 复杂度 O(n)原创 2017-07-18 22:12:49 · 816 阅读 · 0 评论 -
Gym - 101164K Cutting 哈希+枚举
题意:给出字符串A和B,字符串A大小写不区分,字符串B由小写字母构成,构成AB的每种字母的个数相同,询问是否能把B切成3份,重构出字符串A,如果能则输出那三份子串,并按照A的顺序输出。 哈希+枚举 刚开始的时候,以为可以用KMP来过,白白TLE了2发才明白,自己走远了,这题是合适的做法是hash。 O(n^2)的枚举字符串B 的0~i-1 为第一段,i~j-1 为第二段,j~n-1为第三锻, 然后每次借用这三段的哈希值去和A串匹配,这三段有A(3,3) == 6种排列方式,所以枚举这6种排列, 之后借用它们原创 2017-07-25 23:16:17 · 1141 阅读 · 0 评论