随机乱做 part 5
1. ARC117E Zero-Sum Ranges 2
题意:给定 \(n,k\),问有多少长度为 \(2n\) 的序列满足:
-
序列中恰有 \(n\) 个 \(1\) 和 \(n\) 个 \(-1\);
-
恰存在 \(k\) 个 \((l,r)\) 满足 \(\sum\limits_{i=l}^r a_i=0\)。
题解:我们希望对前缀和数组 \(dp\),从高往低 \(dp\),设 \(dp_{i,j,k}\) 为 \(i\) 个位置,\(j\) 个连通块,贡献为 \(k\) 的方案数。
由于每一个连通块旁边都要是新点,所以 \(\binom{p-1}{j}dp_{i,j,k}\to dp_{i+p,j-1,k+p(p-1)/2}\)
考虑还有负数的情况,而第一个和最后一个总是 \(0\),故为 \(\sum dp_{i,j,k} dp_{2n+1-i,j-1,K-k}\)
感觉整体来说是 trivial 的,那为什么不会?大概是麻了,还是太麻了!
2. ARC117F Gateau
3. ARC127F ±AB
4. ARC111F Do you like query problems?
题意:三种操作:区间 \(\max\),区间 \(\min\),区间和,求所有区间和的和的期望。
瞎扯:这肯定是要拆位考虑贡献的。容易得到一个 \(O(NMQ)\) 的解法。观察到如果要使一个数一次操作后不动,可以不操作他,可以 \(\max\) 比它小的,也可以 \(\min\) 比它大的。
有 \(dp_{i,j}=\sum_{k\neq j}dp_{i-1,k}p(n-p+1)+dp_{i-1,j}(\binom{n+1}{2}+ (m+1)p(n-p+1)+2m(\binom{p}{2}+\binom{n-p+1}{2}))\\=p(n-p+1)Sdp_{i-1}+dp_{i-1,j}(\binom{n+1}{2}(2m+1)-mp(n-p+1))\)
我们考察递推式 \(a_n=v_2v_1^{n-1}+v_3a_{n-1},a_0=0\),有 \(a_n=v_2v_1^{n-1}\frac{1-(\frac{v_3}{v_1})^n}{1-\frac{v_3}{v_1}}\),那我们直接算答案即可。
正解:就是如此。然而我眼瞎写错系数调了一年。
5. ARC125F Tree Degree Subset Sum
6. ARC146F Again ABC String
7. ARC142E Pairing Wizards
网络流好题,需要一些能力。
首先考察一个要求 \((x,y)\),不妨设 \(b_x\geqslant b_y\),则一定要求 \(a_x,a_y\geqslant b_y\),若不足可以补齐。
此时还未满足的要求一定满足 \(b_y\leqslant a_y,a_x<b_x\),此时可以选择用 \(x\) 或 \(y\) 补齐到 \(b_x\)。
考虑使用最小割。
建点 \((i,j)\) 表示将 \(a_i\) 增加 \(j\),连边 \(((i,j),T,1)\) 和 \(((i,j),(i,j-1),\infty)\),此处运用了前缀和的思想,保证若使用 \((i,j)\) 则其贡献为 \(j\)。
对于每个 \(a_x<b_x\) 的 \(x\),连边 \((S,x,b_x-a_x)\),对和它有要求的每个 \(y\) 连边 \((x,(y,b_x-a_y),\infty)\),表示要么自己解决自己的,要么大家都来解决自己的。
8. ARC142F Paired Wizards
这题提醒我们更多去关注条件的性质。
如果条件性质不多,可以用分类讨论创造性质。
首先可以做一步转化,假设所有使用 \(2\) 的时间和为 \(T\),\(X\) 使用了 \(C_X\) 次 \(2\),\(Y\) 使用了 \(C_Y\) 次,则答案为 \(T-\frac{C_X(C_X+1)}{2}-\frac{C_Y(C_Y+1)}{2}\)。
开始分讨:
-
\((a_i,b_i)=(c_i,d_i)\) 直接加进答案即可。
-
\(\{(a_i,b_i),(c_i,d_i)\}=\{(1,2),(2,1)\}\)
-
\(\{(a_i,b_i),(c_i,d_i)\}=\{(1,1),(2,2)\}\)
-
\((a_i,b_i)\) 和 \((c_i,d_i)\) 存在一位相同,就变成了单方面的决策。
显然第 \(3,4\) 种情况都是会取一个后缀。
我们可以枚举第二种的划分情况,然后预处理一些后缀情况就好。
具体的我们可以预处理 \(f_i\) 表示 \(X\) 已有 \(i\) 个然后 \(4\) 情况中如何选最优,类似对 \(Y\) 定义 \(g_i\)。然后我们枚举划分情况,枚举 \(3\) 情况的后缀,结合 \(f,g\) 可以算出答案。
9. ARC145E Adjacent XOR
10. ARC141E Sliding Edge on Torus
\((i,j)\to (i-j,j)\),这样就是每次对两排点对应连边。考察一条排的链,则这条链会形成 \(N\) 条链,相邻之间有个偏移量,树亦然。那么一条非树边就相当于是在同一排中连边,连通块数就是 \(\gcd\)。
可以用并查集维护之。具体的,对于每个连通块维护 \(f_i,g_i\) 表示父亲和答案。初始 \(f_i=i,g_i=N\)。
我们还给每个点维护 \(h_i\) 表示它到根的偏移量。
对于一个询问 \((a,b,c,d)\) 转化为 \((u,v,p)=(a-b,c-d,d-b)\),然后分类讨论:
- 若 \(u,v\) 在同一连通块中,则 \(g\to \gcd(g,h_u-h_v-p)\);
- 否则,令 \(U\) 为 \(u\) 的根,\(V\) 为 \(v\) 的根,\(g\to \gcd(g_U,g_V)\),\(U\) 向 \(V\) 连边,\(U\) 子树加 \(h_v+p-h_u\)
时间复杂度 \(O(n\alpha(n))\)。