最近发现的一些trick(naive) & 学车膜你赛题解

最近发现的一些trick(naive) & 学车膜你赛题解

大鸽子更博了!

ARC093F Dark Horse

(2^n) 个人,每次相邻比试,比试到只剩一人。(x<y)(x) 获胜。(1) 选手想获胜,但它会输给其中 (m) 个选手。求初始序列的方案数。

(n,mle 16)

一道状压 (dp) + 容斥原理的好题。

(居然是自己想出来的)

(f_{i,j}) 表示给定选手 (isim m) 决定是否强制为集合的最小值时,集合大小 (2^0,2^1,...,2^{n-1}) 选择的情况。

[f_{i,j} imes {2^n-a_{i-1}-j choose 2^k-1} imes k! ightarrow f_{i-1,j|2^k}[j&2^k=0] ]

[ans=2^n imes sum_S(-1)^{|S|}(2^n-1-S)! imes f_{1,S} ]

小 trick: 计数中对组合意义的转化

有些题目在模很小的质数,如 (2) 时,挖掘特殊性质

给定一个无向连通图 (G),问其诱导子图连通的方案数,对 (2) 取模。

(nle 50,1le |a-b|le 12)

注意到一个图,有 (k) 个连通块,那么它黑白染色的方案数为 (2^k)

我们先求子图黑白染色的方案数,因为连通块 (ge 2) 时须忽略,故对 (4) 取模除二即为答案。

状态就很简单了:黑色,白色,不选。时间 (O(n3^{12}))。其实 (n^23^{12}) 也跑得过去。。。

对于 (prod_{i=1}^k a_i) 时组合意义的转化

相当于在 (k) 个集合中,每个集合大小为 (a_i),各选一个的方案数。

比如 神佬来切切吧

( ext{WC2019}) 数树更是结合了 ( ext{prufer}) 序列的推论:(k) 个连通块,(sum_{i=1}^{k}a_i=n),方案数为 (n^{k-2}prod_{i=1}^{k}a_i)

真是一道不可多得的好题!


突然发现学车送了三套题,质量还可以。其中一套没 latex 所以没做。

prime

min25 筛模板,随便做。

tree

这么好的题目居然没人做 QAQ

(sum_{yin S}dis(x,y)),先建个虚树,在虚树上换根 dp,处理出每个点子树和子树反树的 (sum dis^2,sum dis,sum 1),这样就可以合并了。

因为 (z>0),所以答案点一定在虚树一条链上。我们设 ((a,b,c)_{1,2}) 分别为子树和子树反树的 (sum dis^2,sum dis,sum 1)

[ans=a_1+2b_1x+c_1x^2+a_2+2b_2(v-x)+c_2(v-x)^2 ]

[ans=a_1+a_2+2b_2v+c_2v^2+(2b_1-2b_2-2vc_2)x+(c_1+c_2)x^2 ]

根据初中数学知识,(x) 越接近 (-frac {b}{2a}) 二次函数越小,这样的话我们倍增上去,找到一个点,恰好使得 (dis_{x ightarrow z}le Largefrac {vc_2+b_2-b_1}{c_1+c_2}),这样计算一下 (z)(fa_z) 的答案就行了。

另外就是,倍增上去的时候,若 (-frac {b}{2a}) 下取整 (=0) 也是在范围内的。因为有可能是 (-frac {b}{2a}=0.80),答案在 (fa_x)。若不在 ([0,v)) 的范围内,最小的答案肯定在虚树上的点。

时间 (O(sum klog n)),我认为这是道好题。

triangle

我们把所有点和直线的交点拿去离散化,跑扫描线。这样区域就变成了一些梯形和三角形,且过一个区域的直线不相交。因为若相交,扫描线时会分成两个区域。

这样子你把直线拿去离散化,有两条直线的话相当于在上面区间加,单点查。若一块区域被覆盖 (k) 次,它的贡献为 (S imes (2^k-1) imes 2^{n-k})。时间 (O(n^3log n))

inv

md,随机居然是这么用的,233

类似 k-d tree 查询最近/远点对,复杂度大概是 (O(nsqrt{a}log n))

perm

一眼秒了,只是没看出有更简单的做法。

(f_i)(i) 个点正好连成大小为 (i) 的环的方案数。长度在集合之内就是把一些数设成 (0),不用管它。答案为 (ans_t=t! imes [x^t]e^f)

[f_0=0,f_1=1 ]

[f_i=i!-sum_{j=1}^{i-1}f_j imes {i-1choose j-1} imes (i-j)! ]

[f_i=i!-(i-1)! imes sum_{j=1}^{i-1}frac{f_j}{(j-1)!} ]

然后我就直接分治 FFT 了。。。

一看别人写的,cnm,这么简单。。。有一个结论:(f_i=(i-1)!)。用数学归纳法容易得出。

接下来就是多项式 exp 的事了,时间 (O(nlog n))

dlds

码农题。。。估计考场上我如果能写出这题就 rp 爆表了。。。

想都不想,直接树套树,动态开点线段树套fhq treap,封装一下。虽然这题不仅卡时间还卡空间,不过 12s 即使操作 5 时间 (O(log^3 n)) 其他操作时间 (O(log^2 n)) 都能过吧。。。快速访问用个 deque,码码码就行了。

原文地址:https://www.cnblogs.com/owencodeisking/p/12247013.html