随笔分类 -  ACM / hash

摘要:原题链接 考察:hash 思路: 二维hash模板题,先横着做一遍hash,再纵着坐一遍前缀和hash.获得$a,b$矩阵的hash值参考了前缀和公式: \(sum[i,j] - sum[i,b]*p1[j-b]-sum[a,j]*p2[i-a]+sum[a,b]*p1[j-b]*p2[i-a]\) 阅读全文
posted @ 2021-07-16 21:41 acmloser 阅读(43) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:Flood Fill + hash 思路: 首先连通点很容易找到,关键是判定星群是否相似.对计算机来说很难保存每个连通块形状再旋转比较.这里可以考虑hash映射.这里的经验值是计算连通块两两之间的距离,累加和,作为关键字.这里要用sqrt,不能直接用平方和.平方和更容易发生冲突,比如 阅读全文
posted @ 2021-03-08 00:56 acmloser 阅读(62) 评论(0) 推荐(1) 编辑
摘要:原题链接 考察:枚举 + hash 思路: 暴力是直接枚举a[i]与a[j],需要优化省去一重循环.我们枚举的a[i],a[j]检查是否为k倍数时,需要让a[j]*10t + a[i](t位为a[i]的位数,注意这里用字符串转换反而不如直接求位数方便).一重循环枚举a[i]时,t已知,a[i]已知, 阅读全文
posted @ 2021-03-04 21:31 acmloser 阅读(112) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:hash 思路: 正常是四重for循环枚举,但是由时间复杂度而言我们只能枚举2个数,此时考虑用空间换时间:预处理平方和. 1 #include <iostream> 2 #include <cstring> 3 #include <algorithm> 4 using namespa 阅读全文
posted @ 2021-02-24 14:11 acmloser 阅读(84) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:字符串hash+二分 这道题和前面的查找子串的题一样用到二分,答案都具有单调性,但这道题的单调性不是上道题那么明显.本道题不是简单地枚举端点,如果枚举端点当然没有单调性,本道题是用中心扩展思想(不是第一次学,但我完全不记得).选取一个端点为中心,扩散到两边看是否为回文串.因为这道题是 阅读全文
posted @ 2021-01-07 21:26 acmloser 阅读(85) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:hash+前缀和 做完这道题感觉终于懂一点hash了,散列表hash是将值存储在映射的键里,会有不同值映射到相同键,因此必须要处理冲突 这道题牛二进制的前缀和会根据ash函数映射到相同键,这些前缀和有些和答案要求根本不符,所以我们必须筛掉那些不符合的键,也就是说这道题我们不能仅仅存储 阅读全文
posted @ 2021-01-07 12:25 acmloser 阅读(65) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:hash+字符串的最大最小表示法 通过这道题发现之前的最小最大表示法可以从1开始还不用写三元表达式,就是之前的断环成链思想,这种取余的又要下标从1开始还是断环成链比较方便 关于这道题写写对于hash的思考 字符串hash多用于已知长度的字符串,下标是字符串的下标,hash值不允许为0 阅读全文
posted @ 2021-01-07 02:01 acmloser 阅读(177) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:字符串匹配+hash优化+二分 错误思路: KMP算法是用于看一个串是否为另一个串的子串,这道题如果枚举子串,每个都求next数组再匹配时间复杂度是O(n^2) 求公共子串长度最好不要用KMP 正确思路: hash算法同样是枚举给定长度的字符串,但是hash不用求next数组,利用预 阅读全文
posted @ 2021-01-07 00:00 acmloser 阅读(71) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察: hash 错误思路: 直接用字符串hash,但是字符串hash是针对给定长度求前缀的hash,这里明显不能使用 错误思路2: 没有用变量给字符制造映射,而是直接用的ASCII码作映射,但是这样WA了,目前不知原因 正确思路: 重新给字符制造映射,下标从1开始 1 #include 阅读全文
posted @ 2021-01-06 22:27 acmloser 阅读(81) 评论(0) 推荐(0) 编辑