![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
哈希
&*^*&
这个作者很懒,什么都没留下…
展开
-
acm-(图论、环、暴力、集合哈希)Codeforces Round #664 (Div. 1) B. Boboniu Walks on Graph
传送门可以发现当每个点都只有一个入度的时候恰好满足条件,这时候图由若干个环组成,也可以认为是从每个点出发到达的点构成的集合恰好是1∼n1\sim n1∼n的时候就满足了条件。注意到kkk很小,因此可以暴力k!k!k!枚举所有情况,对于每种情况考虑当前集合的哈希值是否与1∼n1\sim n1∼n构成的集合的哈希值相同,相同的话答案加加。那么问题在于如何快速获得当前的集合哈希值,由于哈希可以进行加减操作,我们考虑预处理出度数为iii的点在cic_ici由preprepre变成xxx的时候哈希值对应的该.原创 2020-12-18 20:48:49 · 128 阅读 · 1 评论 -
acm-(好题、哈希技巧)2020 China Collegiate Programming Contest Qinhuangdao Site J. Jewel Splitting
传送门本题让求一个字符串在不同划分下的排列数,具体来说,给定一个d,d=1,2,3,..,nd,d=1,2,3,..,nd,d=1,2,3,..,n,将字符串划分为ddd个长度相同的部分,剩下一个长度为n%dn\%dn%d的子串,然后求出这ddd个长度相同部分的不同排列方案数,假设这个答案是ansdans_dansd,则我们需要求出ANS=∑i=1nansiANS=\sum_{i=1}^nans_{i}ANS=∑i=1nansi。考虑如何求解ansdans_dansd,假设t=n%dt=n\%.原创 2020-11-25 17:21:27 · 444 阅读 · 0 评论 -
acm-(哈希、线段树)2020 China Collegiate Programming Contest, Weihai Site G.Caesar Cipher
传送门本题让对字符串进行区间加操作,然后随机询问两个子串是否相同。如果是普通的区间加操作,我们直接用线段树维护每个节点的哈希值即可,子串哈希值可以直接查询区间哈希值然后再除以基数的幂次获得。不过本题中区间加需要对655366553665536取模,不过我们可以再每次区间加后通过线段树找到所有刚好等于655366553665536的点,然后将它的值变成0即可,这样修改的次数其实不会很多,由于每655366553665536次区间加操作最多导致655366553665536次取模操作,故实际上均摊下来每次.原创 2020-11-24 18:20:52 · 177 阅读 · 0 评论 -
acm-(字符串哈希)2020ICPC·小米 网络选拔赛第二场 G.Shift and Reverse
传送门题目所述操作其实就是将一个环进行翻转然后再旋转,故总共有2n2n2n种可能的状态,哈希判重即可,注意要双模数防止被卡。const int m1 = 1635947,m2=517619,c=100000;int n,a[maxn<<1],cpow1[maxn],cpow2[maxn];map<pi,bool>vis;int solve(){ int hs1=0,hs2=0,ans=0; FOR(i,0,n){ a[i+n]=a[i]; hs1=(1ll*h.原创 2020-11-01 08:41:23 · 286 阅读 · 0 评论