hash
pubgoso
这个作者很懒,什么都没留下…
展开
-
Educational Codeforces Round 66 (Rated for Div. 2) F. The Number of Subpermutations hash
题目链接思路 :我们给每个数字iii分配两个64位的随机数,构成一个128位的随机串stist_isti。那这样一个长度为kkk的子排列的区间hashhashhash的异或和就等于⊕i=1kst[i]\oplus_{i=1}^kst[i]⊕i=1kst[i]因为1必须被包含进去,那我们以1为左端点l,枚举右端点r,设maxlr=k\max_l^r=kmaxlr=k,那么就check一下[r−k+1,r][r-k+1,r][r−k+1,r]是否为一个子排列。再倒着做一遍,正确性显然。特判一下原创 2020-12-08 23:41:53 · 102 阅读 · 0 评论 -
2020牛客暑期多校训练营(第十场)J.Identical Trees
题目链接我们从两个树的根开始递归下去,设dp[l][r]dp[l][r]dp[l][r]为T1的l为根的子树,和T2的r为根的子树的最小代价。然后往上合并的时候相当于一个二分图最小匹配。先用树hash判同构,然后用最小费用最大流找到最小代价即可。#pragma GCC optimize(2)#pragma GCC optimize(3)#include <bits/stdc++.h>using namespace std;typedef long long ll;const i原创 2020-08-11 01:04:12 · 291 阅读 · 0 评论 -
2020牛客暑期多校训练营(第二场)A.All with Pairs(hash)
思路:我们先对每个串hash一下,记录所有后缀出现次数。然后枚举每个前缀,看相同的后缀出现了多少次。但是可能会重复计算。因为显然如果有一个形如xy…xy的前缀,匹配到xy…xy的后缀有x个,那么xy前缀匹配到xy后缀的y个必然包含x。但其实这x个不是合法的。。。要把不合法的去掉。就其实是每个位置的next值。。把不合法的去掉即可。#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = 1原创 2020-07-14 19:15:35 · 198 阅读 · 0 评论