十二省联考2019
异或粽子(可持久化Trie、堆)
超级钢琴+可持久化Trie???HNOI D1T1怎么不出这种送分题啊
字符串问题(SAM、记搜)
一切字符串问题用SAM就完事了
把原串reverse,这样“某个\(A\)串是前面的\(A\)串支配的\(B\)串的前缀”的条件变成了后缀。而以某个串为后缀的串在SAM的fail树上体现为它的子树。所以我们可以在fail树上,每个点向其儿子连边,对于一个支配关系,\(A\)串对应状态向\(B\)串对应状态连边。这样原图的所有关系就体现为了一张图。判一下环、记搜求一下最长路即可。
注意一点:“\(A\)串对应状态向\(B\)串对应状态连边”有可能会导致当前\(A\)串加入之后,会加入一个长度小于\(B\)串长度,但是和\(B\)串在SAM上处于同一状态的\(A\)串;也有可能存在两个不同的\(A\)串在同一个状态,有可能导致算错贡献。解决的方法就是在连边之前拆SAM上的点,让这两种情况不会出现,也就是让这两种情况对应的串处于不同的状态。
最开始沙雕了,想着对dfn序线段树优化连边,然后常数就大了很多……
骗分过样例(???)
1_998244353
就是\(19^n \mod 998244353\)
1?
的模数看起来就很小,直接暴力
1?+
询问的\(n\)不是很大,把所有询问的\(n\) sort一遍,发现最近的两个\(n\)相差为\(2\),用这两个询问+暴力质因数分解就可以得到模数
1wa_998244353
的本质是暴力算快速幂然后爆了int。我也不知道怎么发现的有一个长度约为50000的循环节,直接预处理循环节和循环节之前的部分。
2p
是判断质数,Miller_rabin即可
2u
是计算莫比乌斯函数,暴力Pollard_rho只能过第一个点……
筛出\(10^6\)范围内的质数,每一次询问将所有数的\(10^6\)范围内的质因子的贡献全部计算掉,那么剩下有贡献的部分只有三种情况:\(p,p^2,pq(p , q \in Prime)\)。对于\(p\)直接Miller_rabin,对于\(p^2,pq\)求一下平方根
PS:这里的Miller_rabin只用\(24251\)做二次探测都可以过是什么鬼
2g
是求原根,\(998244353\)直接暴力,对于\(2*3*5*7*11*13*19*23+1\)考虑:先求出一个原根\(g\),把所有数\(x\)表示为\(g^y\)的形式,那么如果\(x\)是原根,那么\(gcd(x , 2*3*5*7*11*13*19*23) = 1\)。
2g+
有一个模数不晓得,或许可以暴力求?鬼知道5h暴力能不能求出来
皮配(背包)
50pts很简单,设\(dp_{i,j,k}\)表示考虑了前\(i\)个学校,蓝阵营\(j\)人、鸭派系\(k\)人的方案数,同一个学校一起转移。复杂度\(O(TNM^2)\)
对于\(k=0\)的情况,因为选择阵营和选择派系之间是独立的,选择哪个阵营不会影响选择哪个派系,反过来也一样。所以总方案数等于分配派系的方案数×分配阵营的方案数,两个分别背包一下。
当\(k=30\)时,会有\(30\)个城市在选择了阵营之后有某些学校不能选择某一个派系,而没有限制的城市跟\(k=0\)相同。我们可以把这\(30\)个城市单独拿出来做50pts的DP,对于其他的做k=0的DP。
但是如果这\(30\)个城市的人数总和很大,复杂度仍然难以接受。但是注意到:对于有限制的城市中没有限制的学校,选择派系跟选择阵营仍然是无关的,所以并不需要在50pts的暴力做法中记录,而是可以放在k=0的DP中计算贡献。
所以设\(f_{i,j,k}\)表示考虑了前\(i\)个有限制的城市,这些城市的所有学校中选择蓝阵营的人数为\(j\),这些城市有限制的学校中选择鸭派系的人数为\(k\)的方案总数,\(g_{i,j}\)表示考虑了前\(i\)个没有限制的城市,选择蓝阵营的总人数为\(j\)的方案数,\(h_{i,j}\)表示考虑了前\(i\)个没有限制的学校,选择鸭派系的总人数为\(j\)的方案数。
\(f\)的转移先枚举当前城市选择哪一个阵营,再对于有限制的学校考虑选择派系。而有限制的城市中无限制的学校选择派系的贡献则放入了\(h\)中进行计算。
最后统计答案只需要枚举\(f_{i,j,k}\)中的\(j,k\),这样\(g\)和\(h\)的有效转移对应一段区间,前缀和一下。总复杂度\(O(T(10K^2M + NM))\)
春节十二响(贪心、启发式合并)
一条链的贪心就是:把元素放进两个堆里,每一次从两个堆里弹最大值,类似于启发式合并
然后把它放到树上就可以了