ICPCCamp 2017. Day 2. zimpha's Contest 3
一场比一场更阴间。
A \(\color{red}\bigstar\)
从前向后,对于每个前缀去找一个长度不超过一半的前缀,这个可以 kmp 上跳,把等差数列缩起来,复杂度是对的。
然后不会了。
B \(\color{green}\bigstar\)
上一场出过的套路了。
依然是变成 \(\sum 2^{c(S)}\bmod 4\),然后每个点染黑白,钦定 \(1\) 染黑,这样就可以 \(\bmod 2\) 了,然后每条两边同色的边可以有两种方案,然后发现这样的边必须一条没有才对答案有贡献。
所以对答案有贡献的是二分图情况,而一个连通图的二分图划分数只有一种。
所以就是二分图判定。
C \(\color{blue}\bigstar\)
神题,想了一天。
主要完全看不懂题解在写啥。
首先乱做就可以找到 \(b_2(n)\) 是 link。
但是这个东西毛用没有,反正我不会做。
直接考虑其生成函数形式:
最终答案的生成函数:
分式的处理,可以考虑去插值,因为 \(\frac{1}{1-x}\) 的系数是 \(0\) 次多项式。
但是 \(\frac{1}{1-x^m}\) 的系数不能表示为 \(x\) 的若干次多项式,因为是 \(x^2\) 的一次多项式,就是下标每个乘了 \(m\)。
考虑 \(i\) 从小到大,那么每次相当于把下标除以二继承上去,然后注意到把每个下标除以二后,多项式次数不变,就是 \(a_ix^i\to a_i (mx)^i\)。
因此最后多项式的次数就是 \(k\log_m n+1\)。
对于每个 \(i\) 去爆出前面的点值,然后就可以算了。
注意在 \(i=\log n\) 层的地方只会保留 \(m^i\) 同余的点值,其他点值都不知道。
因此第 \(i\) 层只需要保留所有 \(x\equiv n \pmod {2^i}\) 的点值即可。
点值连续插值可以优化成 \(O(k\log n)\) 的,所以最终复杂度 \(O(k^2\log^3 n)\)。
D \(\color{blue}\bigstar\)
高妙答辩题。
直接考虑数直线非常困难,肯定要通过选两个点来容斥。
两个点的向量如果是 \((x,y)\),那么考虑一条通过 \(L\) 个点的直线,\(\gcd(x,y)=1\) 会算到 \(L-1\) 次,\(\gcd(x,y)=2\),会算到 \(L-2\) 次,那么直接两个相减就可以计算最终贡献。
枚举一个点,考虑把贡献拆成:
x
x.
x..
x...
x....
xxxxxx
.x.....
..x.....
...x.....
分成三块,每一块就是一个 \(\gcd\) 的式子。
大力化一下,反正最后答案是
三个杜教筛就行。
E \(\color{green}\bigstar\)
转对偶,没了。
F \(\color{green}\bigstar\)
按左端点排序去选,设个二维 dp,考虑一下两维是咋转移到下一个的,维护一下即可。
\(O(n^2\log n)\)。
G \(\color{green}\bigstar\)
最大流转最小割,然后模拟最大流。
H
大力分讨题。
I \(\color{blue}\bigstar\)
枚举一个拆成子树的大小,那么原树划分为若干棵大小为 \(d\) 的子树的方案是唯一的,就是子树大小超过 \(d\) 就割出去,树哈希一下就可以判断一个 \(d\) 是否合法。
然后相当于找 \(d_1|d_2|...|d_k\) 满足都合法,随便做。
复杂度 \(O(d(n)n)\),官方题解好像有线性,不知道咋做。
J \(\color{red}\bigstar\)
不会。