
Hash
lajiyuan_
已经退役啦,会不定期更新cf博客 or 其他计算机知识相关的博客.
展开
-
HASH算法模板以及简单的入门题总结
Hash算法模板//暂时没用到双hash,用到会过来补充//hash一般用来解决字符串判重/字符串匹配问题//遇见不定长问题可通过二分+hash降低复杂度//遇见定长字符串问题可通过尺取+hash来降低复杂度//二维hash的时候尺取方法就是把之前不需要的都变为0再加上当前行,将匹配字符串整体下移,来验证hash值是否相等#include<string.h>type...原创 2018-06-18 12:20:03 · 5148 阅读 · 13 评论 -
【51NOD1055 最长等差数列】DP+剪枝+Hash
51NOD1055 最长等差数列题意就是给你n个数,让你用n个数组成一个最长的等差序列。1&lt;=n&lt;=1041&lt;=n&lt;=10^41<=n<=104做法我们肯定要想O(n2)O(n^2)O(n2)的做法再加一些剪枝,首先将数组排序,之后我们设dp[i][j]dp[i][j]dp[i][j]表示以i为结尾的公差为j的最长等差序...原创 2018-12-06 01:27:48 · 187 阅读 · 0 评论 -
【Mail.Ru Cup 2018 Round 3 E. Check Transcription 】Hash+尺取
E. Check Transcription题意给你一个01串s,一个字符串t,0可以映射成r0,1可以映射成r10可以映射成r_0,1可以映射成r_10可以映射成r0,1可以映射成r1问有多少组r0,r1可以满足映射之后s=t问有多少组r_0,r_1可以满足映射之后s=t问有多少组r0,r1可以满足映射之后s=t∣s∣&lt;=105,∣t∣&lt;=106|...原创 2018-11-28 09:17:45 · 903 阅读 · 0 评论 -
【ACM-ICPC 2018 南京赛区网络预赛 I. Skr】 manacher+hash
I.skr 题意:求一个字符串所有本质不同的回文子串的贡献和,每个符合条件的子串的贡献就是该子串代表的数字值。 该问题可以转化为两个子问题来考虑,第一个子问题就是找出所有本质不同的回文子串,第二个问题就是计算该子串对答案的贡献。 我们首先来考虑第一个问题,我们首先要解决的是如何找出所有的回文子串,如果以某个点为中心去搜就太慢了,我们发现manacher算法寻找最长回文子串的过程中其实已经找了...原创 2018-09-02 20:21:10 · 349 阅读 · 2 评论 -
【HDU 2859 Phalanx】Hash+DP
HDU2859 HDU2859 求最大对称子矩阵,对称是延对角线对称,由于本题给出的对角线不方便操作,我们将所有字符串逆置一下,就变成了好操作的对角线,然后我们对每一行每一列进行hash,dp的时候只要从左上角dp值一直减小到0,判断是否有len满足向上和向左的hash值相等。 HDU2859代码#include<stdio.h>#include<iostream...原创 2018-08-30 18:43:42 · 248 阅读 · 0 评论 -
【HDU 4821 String】 Hash+尺取
HDU4821 本题题意就是给你一个字符串,问你该字符串具有多少个子串满足 长度为m*l,而且可以拆成m个长度为l的不相同子串。 定长字符串问题,很明显是可以hash+尺取的,我们可以枚举l个子串的起点,之后算出当前m*l的字符串的情况,之后不断往后尺取就可以了 复杂度是o(l∗(len/l)∗log(m))o(l∗(len/l)∗log(m))o(l*(len/l)*log(m)) 因为...原创 2018-06-18 13:02:03 · 216 阅读 · 0 评论 -
【UVA 11019 Matrix Matcher 】 二维Hash+尺取 / 二维AC自动机
UVA-11019 本体题意就是给你AB两个字符矩阵,问你B矩阵在A矩阵中的出现次数。 我们可以进行二维hash,其实就是把n个横向串连在一起hash。 注意判相等的时候,我们不断进行尺取+hash,尺取的过程,我们删除当前第一行的hash值加上最后一行的hash值,删除第一行的hash值直接删去就可以 例如 AAAAAAAAA BBBBBBBBB CCCCCCCCC 我们删去第一...原创 2018-06-18 13:01:00 · 281 阅读 · 0 评论 -
【UVA 257 Palinwords】Manacher+Hash
UVA-257 本题意义是给你一堆字符串,将其中具有两个长度超过3的回文串的字符串输出 要求这两个回文字符串不能完全覆盖,但是可以重合,而且这两个回文字符串不能相同。 由于要求长度大于3而且可以重合,我们只要求每个长度为3/4的回文串就可以了,当某个位置存在长度>=3的回文串,如果串长为奇数,那么就取3,否则取4,然后把遍历指针i往后挪一位(去掉覆盖的情况),之后用hash判重就可以了...原创 2018-06-18 12:58:50 · 240 阅读 · 0 评论 -
【POJ2774】后缀数组 / Hash+二分
POJ2774 链接 题意求两个串的最长公共子串,我们可以把两个串用一个特殊字符拼接,然后跑SA求出heightSA求出heightSA求出height,由于最长公共子串肯定是heightheightheight中的某一个,而且要满足sa[i]和sa[i−1]sa[i]和sa[i−1]sa[i]和sa[i-1]分别属于两个串,所以只要跑一遍后缀数组遍历一遍heightheightheight就...原创 2018-05-17 02:06:53 · 385 阅读 · 0 评论 -
【HDU 1686 Oulipo】KMP/HASH
HDU1686 题意就是求B串在A串中的出现次数(可重叠 依旧是利用next数组,当某次匹配完成之后,将ans++,然后把j跳转到next[j],原理类似上一题的不匹配的情况,省略不必要的查找。 HDU1686代码#include&lt;stdio.h&gt;#include&lt;iostream&gt;#include&lt;string.h&gt;using namesp...原创 2018-05-29 20:28:18 · 247 阅读 · 0 评论 -
【Technocup 2017 - Elimination Round 1 E. Games on a CD 】枚举+Hash
题目链接http://codeforces.com/contest/727/problem/E题意给你一个长度为n×kn \times kn×k的环,环上每一个位置有一个字符。现在给你ggg个长度为kkk的字符串,问是否可以在ggg个字符串中找出kkk个构成这个环。做法由于单个字符串长度已经确定,只需要枚举第一个串在环中的下标即可。而且只需要枚举到kkk,因为枚举111和k+1k+1...原创 2019-03-04 13:10:31 · 399 阅读 · 0 评论