最近发现的一些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}) 选择的情况。
小 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)。
根据初中数学知识,(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)。
然后我就直接分治 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,码码码就行了。