AtCoder 板刷 / vp / contest 记录

ARC

ARC104

A

一道小学数学题,\(X = \frac{A+B}{2}, Y = \frac{A-B}{2}\)

B

一道暴力题。发现子串合法的充要条件是 \(cnt_{\text{A}} = cnt_{\text{T}} \land cnt_{\text{G}} = cnt_{\text{C}}\),暴力统计即可。

C

简单区间 dp。发现 \([1,2n]\) 可以拆成若干合法且不交的段,段内 \([i,i+\frac{len}{2}-1]\) 为某些 \(a_i\)\([i+\frac{len}{2},i+len-1]\) 为某些 \(b_i\)。据此区间 dp 即可,一个区间合法当且仅当它本身合法或者它能被拆成两个区间。

D

很平凡的一道计数啊。

考虑将所有数都减去 \(x\),那么就要求选的数和为 \(0\)

正负分开考虑,\(0\) 可以任意选。需要多重背包求 \(f_{i,j}\) 表示选 \(1 \sim i\) 的数和为 \(j\) 的方案数。前缀和优化是平凡的。

E

首先期望转化成 \(\text{LIS}\) 总和除以方案总数(即 \(a_i\) 乘积)不必多说了。观察可发现题目 \(n\) 特别小,考虑 \(O(n^n)\) 枚举 \(x_i\) 的相对大小关系(排名),固定排名后算出 \(\text{LIS}\),再计算这种排名对应的方案数。

于是现在问题变成了有 \(m\) 个数,每个数的上界为 \(b_i\),要求序列单调递增的方案数。考虑直接套 CF1295F Good Contest 的做法,\(b_i\) 离散化后设 \(f_{i,j}\) 为第 \(i\) 个数位于值域第 \(j\) 段的方案数。转移枚举以 \(i\) 为右端点的极长值域位于同一段的区间左端点 \(k\),以及 \(k-1\) 位于哪个段。系数是在 \([1,len_j]\) 中选 \(i-k+1\) 个互不相同的数的方案数(为 \(\binom{len_j}{i-k+1}\))。可得:

\[f_{i,j} \gets \sum\limits_{k=1}^{i-1} \sum\limits_{x=1}^{j-1} \binom{len_j}{i-k+1} f_{k-1,x} \]

暴力计算即可。

总时间复杂度大概是 \(O(n^{n+5})\)(没仔细算,实际远远达不到)。

F

考虑连边 \((i,p_i)\)(若 \(p_i = -1\) 则不连边),可以发现形成了一篇内向树森林且这个森林存在一个 dfs 序为 \(1,2,...,n\)

这棵森林有如下性质:

  • \(\forall v \in son_u,h_u > h_v\)
  • \(\forall v,w \in son_u \land v < w,h_v \le h_w\)

考虑一个 \(p\),我们寻找一个最优的 \(h_0\),使得它能生成 \(p\)。显然 \(h_0\) 的每个数都要取到下界。

因为一棵树的点编号为连续的区间,所以考虑区间 dp。

\(f_{i,j,x}\)\([i,j]\) 形成了一棵树且 \(h_i = x\) 的方案数,同时设 \(g_{i,j,x}\)\([i,j]\) 形成了一片森林且最后一棵树的根的 \(h\)\(= x\) 的方案数。

有转移:

  • \(f_{i,j,x} \gets g_{i+1,j,x-1}\),表示以 \(i\) 为根将 \([i+1,j]\) 的森林连起来。
  • \(g_{i,j,x} \gets f_{i,j,x}\),表示一棵树也算森林。
  • \(g_{i,j,x} \gets \sum\limits_{k=i}^{j-1} [x \le a_{k+1}] \sum\limits_{t=1}^x g_{i,k,t} \times f_{k+1,j,x}\),表示枚举这片森林的最后一棵树(此时森林一定要有至少两棵树)的树根 \(k+1\)\(h_{k+1}=x\),前面的数的 \(h\) 值都要 \(\le x\)
  • \(g_{i,j,x} \gets \sum\limits_{k=i}^{j-1} [x \le a_{k+1}]g_{i,k,x} \times \sum\limits_{t=1}^{x-1} f_{k+1,j,t}\),仍然表示枚举最后一棵树的根 \(k+1\),但是 \(h_{k+1} < x\),此时把最后一棵树的 \(h\) 值整体加直至 \(h_{k+1} = x\)\(< x\) 是因为要避免算重。

答案即为 \(\sum\limits_{x=1}^n f_{1,n,x}\)

直接转移是 \(O(n^5)\) 的,因此再设 \(sf_{i,j,x} = \sum\limits_{t=1}^x f_{i,j,x},sg_{i,j,x} = \sum\limits_{t=1}^x g_{i,j,x}\),这样整道题就变成 \(O(n^4)\) 了。

ARC121

A

保留 \(x,y\) 中的次大,最大,次小,最小,显然答案一定在它们之间。然后暴力算。时间复杂度 \(O(n \log n)\),瓶颈在排序。

B

若所有颜色均出现偶数次,则答案为 \(0\)

否则若只出现了两种颜色,则枚举一种颜色的所有 \(a_i\)lower_bound 去找另外一种颜色中和 \(a_i\) 最接近的值即可。

如果三种颜色都出现了,那么在只有两种颜色的基础上,答案还可能是两种出现奇数次的颜色跟另外的颜色最接近的值的绝对值之和,取最小值即可。

C

每次肯定是选择一对逆序对然后交换。如果当前没有可以操作的位置,就选 \(n-1,n\) 或者 \(n-2,n-1\) 换,具体是什么看奇偶性。

看起来不是很对,但是能过(((

D

考虑如果限制每次只能选两个怎么做。显然可以将序列排序后贪心地选最小和最大,次小和次大,等等配对。

如果每次可以选一个,那么就相当于选它和一个 \(0\) 配对。然后就想到枚举选一个的次数,然后再按上面的方法贪心。

时间复杂度 \(O(n^2 \log n)\)

E

显然 \(a_i\) 可以是除了 \(i\) 的所有祖先以外的任意点。考虑求 \(a\) 的逆排列 \(b\)\(b_i\) 就不可能是 \(i\) 子树内的点。

考虑一个容斥,\(g_i\) 为钦定其中 \(i\) 个结点不合法的方案数。那么 \(ans = \sum\limits_{i=0}^n (-1)^i g_i (n-i)!\)

现在问题转化成了如何求 \(g_i\)。考虑树形 dp,\(f_{u,i}\) 表示 \(u\) 子树内有 \(i\) 个点不合法 且只考虑不合法的点 的方案数。

  • 不同子树,因为不合法的范围不交,所以可以直接类似树形背包合并,\(f_{u,j+k} \gets f_{u,j} \times f_{v,k}\)
  • 最后计算 \(u\) 不合法的情况的 dp 值时,\(f_{u,i} \gets f_{u,i-1} \times ((sz_u-1)-(i-1))\),意思是 \(u\) 原本可以选子树内的 \(sz_u-1\) 个点,有 \(i-1\) 个点已经被选了。

那么 \(g_i = f_{1,i}\)

时间复杂度 \(O(n^2)\)

F

如果存在一个叶子结点值为 \(1\),且连向它的父亲的边是 OR,那么这样就是合法的。因为可以最后再缩它,那么根结点的值就是 \(1\) 了。

否则分类讨论:

  • 如果值为 \(1\) 且 AND 或者值为 \(0\) 且 OR,那么什么时候缩边都没有影响,可以立即缩。
  • 如果值为 \(0\) 且 AND,就相当于在一个时刻将它的父亲的值设为 \(0\)。显然要贪心地一开始就立即缩。

然后我们发现缩边可以按照深度从大到小缩,顺序确定了,考虑树形 dp,\(f_{u,0/1}\) 表示 \(u\) 子树已经操作完了且不含 \(1\) OR,\(u\) 的值为 \(0/1\) 的方案数;\(g_u\) 表示 \(u\) 子树已经操作完了且包含 \(1\) OR 的方案数。转移也是显然的,分八种情况(\(0/1\) OR/AND \(0/1\))讨论即可。

时间复杂度 \(O(n)\)

ARC108 (VP)

赛时 3min 秒 AB,D 一看感觉很恶心就没怎么想,C 一直在想巨大做法,到最后也没写出来……

成绩是 Rank 1044, Performance 1415,简直没眼看。

A

枚举即可。

B

用一个栈维护即可,每次遇到 fox 就弹栈。

C

其实挺简单的……随便搞一棵生成树出来,每次尽量满足 \(fa \to u\) 的要求,如果满足不了就随意填一个数。

D

只讨论 \(c_{\text{AB}} = \text{B}\) 的情况,两种情况是对称的。

此时可以生成 \(\text{ABB...B}\),若 \(c_{\text{BB}} = \text{B}\) 答案为 \(1\),否则 \(c_{\text{BB}} = \text{A}\)。此时 \(\text{BB}\) 可以不相邻。如果 \(c_{\text{BA}} = \text{A}\),说明 \(\text{A}\) 可以相邻,此时可以生成以 \(\text{AB}\) 开头,\(\text{B}\) 结尾的所有串,答案为 \(2^{n-3}\);否则可以生成以 \(\text{AB}\) 开头,\(\text{B}\) 结尾且不存在子串 \(\text{AA}\) 的所有串,答案为 \(fib_{n-2}\)

E

考虑添加 \(a_0 = -\infty,a_{n+1} = -\infty\)。考虑若 \(i,j\ (i < j)\) 被选,那么再选到 \(i < k < j\)\(k\),就只和 \(i,j\) 有关了。因此设 \(f_{i,j}\) 为选了 \(i,j\)\([i+1,j-1]\) 的都没选的期望,有转移:

\[f_{i,j} = 1 + \dfrac{\sum\limits_{i<k<j,a_i<a_k<a_j} f_{i,k} + f_{k,j}}{\sum\limits_{i<k<j,a_i<a_k<a_j} 1} \]

直接做是 \(O(n^3)\) 的,容易用值域树状数组优化至 \(O(n^2 \log n)\)

F

这个 F 就略显简单了……

考虑随便找一条直径 \(S \to T\),首先如果 \(S,T\) 同色,\(\max(x,y) = dis_{S,T}\)

接下来只考虑 \(S,T\) 异色的情况。

一个很显然也很重要的结论:存在一个点 \(u\),使得 \(dis_{S,u}\)\(dis_{T,u}\) 能贡献到 \(\max(x,y)\) 上。具体看 \(u\) 染什么颜色。

然后是一个 经典套路:与其计算 \(\max(x,y)\) 的值,不如计算有多少个 \(i\) 使得 \(\max(x,y) \ge i\)

\(\max(x,y)\) 的下界为 \(\max\limits_u \min(dis_{S,u},dis_{T,u})\)。考虑当 \(i\) 大于这个下界的时候容斥计算,用 \(2^{n-1}\) 减去 \(\max(x,y) < i\) 的情况。此时 \(\max(dis_{S,u},dis_{T,u}) < i\) 的点染什么颜色都行,\(\max(dis_{S,u},dis_{T,u}) \ge i\) 的点,由于前面保证了 \(\min(dis_{S,u},dis_{T,u}) < i\),因此有且仅有一种颜色可以染。这些贡献都可以预处理 \(2\) 的次方后简单计算。

ARC110

A

答案为 \(\operatorname{lcm}(2,3,...,n) + 1\)

B

根据首尾分类讨论即可。

C

每次对于 \(p_i\),找到 \(p_j = i\)\(j\),依次执行 \(j-1,j-2,...,i\)。如果次数没用完或者最后 \(p_i \ne i\) 就寄了。

D

考虑 \(\binom{b_i}{a_i}\) 的组合意义,是把 \(b_i + 1\) 个物品分成 \(a_i + 1\) 段且每段非空的方案数。

所有 \(b_i\) 放在一起考虑,就是把 \(n + \sum\limits_{i=1}^n b_i\) 个物品分成 \(n + \sum\limits_{i=1}^n a_i\) 段的方案数。

这个等于把 \(n + m + 1\) 个球分成 \(n + 1 + \sum\limits_{i=1}^n a_i\) 段的方案数,简单计算即可。

E

似乎是很经典的套路。

考虑把 \(\text{A}\) 看成 \(1\)\(\text{B}\) 看成 \(2\)\(\text{C}\) 看成 \(3\),那么一次操作相当于选择一个 \(a_i \ne a_{i+1}\)\(i\),将 \(a_i\)\(a_{i+1}\) 替换成一个数 \(a_i \oplus a_{i+1}\)

那么题目相当于把 \(a\) 划分成若干段,满足每段的异或和不为 \(0\) 且不是同一种字符或者长度为 \(1\)。将每段的异或和排成一个新数组 \(b\),对所有本质不同的 \(b\) 计数。

我们反过来观察对于一个固定的 \(b\),它有没有可能被形成。

考虑贪心,每次跳到下一个区间异或和为 \(b_i\) 的位置。并且要求最后剩下的一段异或和为 \(0\)

\(nxt_{i,j}\) 为最小的 \(k\) 满足 \(a_i \oplus a_{i+1} \oplus \cdots \oplus a_k = j\),这个是可以线性预处理的。

那么设 \(f_i\) 为将前 \(i\) 个字符划分为若干段,并且每一段都是所有异或和相同的段中右端点最靠左的段。

转移是 \(f_{nxt_{i+1,j}} \gets f_i\)

注意后面还有一段异或和为 \(0\),因此答案不仅仅是 \(f_n\)

注意特判 \(a_i\) 都相等的情况,此时前面的 \(f_i\) 传递不到 \(f_n\),答案为 \(1\)

F

\(n-1\)\(0\) 依次每项执行 \(n\) 次操作即可。

考虑一直换一个位置,那么这个位置最后会变成 \(0\)。从后往前考虑,依次保证后缀合法。

ARC105

A

简单判断即可。

B

答案为所有数的 \(\gcd\)

C

预处理 \(g_S\) 表示 \(S\) 集合内的骆驼需要的最小长度,然后枚举全排列,设 \(f_i\) 为第 \(1 \sim i\) 只骆驼的最短距离,转移是 \(f_i = \max\limits_{j=1}^{i-1} f_j + g_{\{p_j,p_{j+1},...,p_i\}}\)

D

  • \(n\) 为偶数:此时先手是 \(\text{Nim}\) 游戏的先手,因此先手的目标是使得 \(\oplus x_i \ne 0\)。不难发现如果全部数出现偶数次那么后手必胜,因为可以对称先手的操作;否则先手每次选择一堆最大的放到最多的里面,不难发现这一堆的总和一定大于其他堆的总和。
  • \(n\) 为奇数:此时后手是 \(\text{Nim}\) 游戏的先手,因此先手的目标是使得 \(\oplus x_i = 0\)。类似地,后手每次选择一堆最大的放到最多的里面,这一堆的总和一定大于其他堆的总和,因此后手必胜。

E

显然终止态是只剩两个连通块,一个包含 \(1\) 另一个包含 \(n\),并且两个连通块内的边数均为 \(\frac{sz(sz-1)}{2}\)

如果只在连通块内连边,那么能连的边的总数是 \(\frac{n(n-1)}{2} - \sum\limits_{i=1}^{cnt} \frac{sz_i (sz_i - 1)}{2}\),其中 \(cnt\) 为连通块总数,\(sz_i\) 为第 \(i\) 个连通块的点数。下文钦定 \(1\) 所在连通块为第 \(1\) 个连通块,\(n\) 所在连通块为第 \(2\) 个连通块。

然而还可以在连通块之间连边,这样还需要 \(cnt - 2\) 次连边使得原图仅剩第 \(1\) 个和第 \(2\) 个连通块。

在连通块之间连边时,设两个连通块的 \(sz\) 分别为 \(x,y\),那么会新增 \(xy-1\) 条块内部的连边。如果 \(x,y\) 均为奇数,那么不会影响能连的边数的奇偶性;如果 \(x,y\) 有一个为偶数,那么能连的边数的奇偶性会改变。

据此考虑按 \(n\) 的奇偶性分类讨论。

  • \(n \bmod 2 = 1\):最终 \(sz_1\)\(sz_2\) 必然一奇一偶。此时合并偶数块的次数可以算出来。
  • \(n \bmod 2 = 0\):最终 \(sz_1\)\(sz_2\) 两奇或两偶。如果初始 \(sz_1\)\(sz_2\) 奇偶性不相同,那么先手可以控制最终 \(sz_1\)\(sz_2\) 的奇偶性,此时先手必胜;否则 \(sz_1\)\(sz_2\) 的奇偶性不会改变,因为如果落败的那一方想改变,那么胜利的那一方可以操作回去。那么此时合并偶数块的次数也可以算出来了。

F

考虑转化枚举边集为枚举点集。在点集上二分图的 黑白染色方案一一对应一个极大可行边集

\(g_S\) 为不考虑连通,点集 \(S\) 的答案。考虑枚举黑点集合 \(T\),那么 \(g_S \gets 2^c\),其中 \(c\) 为从 \(T\) 连向 \(S \backslash T\) 的边数;减掉不连通的集合,这个是一个常见套路, 钦定包含最小的点的连通块与其他点不连通 ,设 \(f_S\) 为考虑连通后点集 \(S\) 的答案,枚举包含 \(S\) 内编号最小的点的子集 \(T\),那么 \(f_S \gets -f_T g_{S \backslash T}\)

ARC106

A

暴力枚举即可。

B

经典题,判断每个连通块的和是否相等即可。

C

显然前者是正确解法。

构造 \([1,2(m+2)],[2,3],[4,5],...,[2(m+1),2(m+1)+1]\) 即可。

D

考虑计算 \(\sum\limits_{i=1}^n \sum\limits_{j=1}^n (a_i + a_j)^x\)

\[ans_x = \sum\limits_{i=1}^n \sum\limits_{j=1}^n (a_i + a_j)^x \]

\[= \sum\limits_{i=1}^n \sum\limits_{j=1}^n \sum\limits_{k=0}^x a_i^k \times a_j^{x-k} \times \binom{x}{k} \]

\[= x! \times \sum\limits_{k=0}^x \dfrac{\sum\limits_{i=1}^n a_i^k}{k!} \times \dfrac{\sum\limits_{j=1}^n a_j^{x-k}}{(x-k)!} \]

先预处理出所有 \(f_x = \dfrac{\sum\limits_{i=1}^n a_i^x}{x!}\),然后做一次 \(O(k^2)\) 暴力卷积即可。

E

猜测答案不会很大,事实上上界是 \(2nk\)

考虑二分答案转化为判定性问题。设当前二分的是 \(m\) 天,考虑建一张天和人的二分图(每个人拆 \(k\) 个点),每一天向这一天来的人连边,则问题是求这张图是否存在一个匹配,使得每个人都在匹配内。

考虑预处理出每一天有哪些朋友来,判定时枚举 \(n\) 个人的子集,则需要计算有多少天连的边与这个集合有交。考虑反过来计算有多少天连的边与这个集合无交,然后用总天数减去。

F

晚自习的时候胡出来的做法(((

首先你会发现题目等价于求 \(\sum\limits_{(\sum\limits_{i=1}^n a_i) = 2(n-1) \land \forall i \in [1,n], 1 \le a_i \le d_i} \prod\limits_{i=1}^n \dfrac{d_i!}{(d_i - a_i)!}\)。翻译一下就是枚举每个点的度数 \(a_i\)(一个结论是当度数总和 \(= 2(n-1)\) 并且每个点的度数都为正整数时一定能构造出合法的树),然后乘上对应的有序选择点内的洞的方案。

你会发现如果固定 \(a_i\),这个东西的组合意义是把 \(\sum\limits_{i=1}^n d_i\) 个数分成 \(n\) 组每组 \(d_i\) 个数,再在每组有序选出 \(a_i\) 个数。\(a_i \ge 1\) 比较烦,不妨整体减 \(1\),也就是一开始每组先选一个数,这样就变成了 \(a_i \ge 0\)。然后就发现可以把组合并起来考虑,即答案为先在每组中选一个数再在 \(\sum\limits_{i=1}^n (d_i - 1)\) 个数内有序选择 \(\sum\limits_{i=1}^n (a_i - 1) = n - 2\) 个数的方案数,即 \((\prod\limits_{i=1}^n d_i) \dfrac{(\sum\limits_{i=1}^n (d_i - 1))!}{(n-2)!}\),这个东西可以 \(O(n)\) 计算。

ARC107

A

乘法分配律即可。答案为 \((\sum\limits_{i=1}^n i)^3\)

B

\(1 \le x,y \le n\)\(x + y = m\) 的对数可以 \(O(n)\) 求出。乘法原理即可。

C

行与行和列与列之间是独立的。以行为例,如果第 \(x,y\) 行可以交换就连边,那么每个连通块内的顺序可以任意,答案乘上对应的阶乘。

D

\(f_{i,j}\) 为有 \(i\) 个元素,和为 \(j\) 的方案数。

每次可以加一个 \(1\),或者整体除 \(2\)。有转移:

\[f_{i,j} \gets f_{i-1,j-1} + f_{i,2j} \]

E

打表发现 \(\forall i,j > 4, a_{i,j} = a_{i-1,j-1}\)。暴力跑出前 \(4\) 行和前 \(4\) 列即可计算。

F

神秘网络流题,不知道是怎么想到的。

求绝对值可以看成正负抵消,记 \(S^+ = \sum\limits_{i=1}^n [b_i > 0] b_i\)\(S^- = \sum\limits_{i=1}^n [b_i < 0] -b_i\),则 \(|\sum\limits_{i=1}^n b_i| = \max(S^+, S^-) - \min(S^-) = S^+ + S^- - 2\min(S^+, S^-)\)

于是题目变成了最小化 \(a_i + 2\min(S^+, S^-)\) 的值。

考虑最小割,因为有删点的操作,考虑每个点拆成一个入点和一个出点。

  • \((u,u',a_u + |b_u|)\) 表示如果删除 \(u\) 就会增加 \(a_u\) 的代价,还会使 \(S^+ + S^-\) 少了 \(|b_u|\)
  • \(b_u > 0\)\((S,u,2b_u)\),否则连 \((u',T,-2b_u)\),表示如果在同一个连通块内的点只能同时选正或负。
  • 对于原题给出的每条边连 \((u',v,\infty),(v',u,\infty)\),表示不能被割。

最后用 \(S^+ - S^-\) 减去最小割就是答案。

ARC109 (VP)

仍然是飞快地秒了 A ~ C,DE 看起来都不可做,遂弃赛。

最后是 Rank 228, Performance 2225

A

按题意模拟计算即可。你甚至可以写个最短路(

B

考虑多买一个 \(n + 1\),然后把它切成 \(1,2,...,x\)

C

考虑直接模拟,但是状态不用全部存,每次倍增即可。

D

这种题根本做不出来……

考虑一个 L 形怎么方便地表示出来。可以发现对于组成 L 形的三个点 \((x_1,y_1),(x_2,y_2),(x_3,y_3)\),只要知道 \(x = x_1 + x_2 + x_3\)\(y = y_1 + y_2 + y_3\),就能确定三个坐标。证明是设折点坐标为 \((p,q)\),则其余两个点的坐标可以用 \((p+u,q),(p,q+v)\) 表示,其中 \(u,v \in \{-1,1\}\)。那么 \(x = 3p + u, y = 3q + v\)\(p\) 可以通过 \(\frac{x}{3}\) 四舍五入得出,\(q\) 同理。

那么答案就是把坐标和从 \((1,1)\) 变成 \((ax + bx + cx, ay + by + cy)\) 的最小步数。考虑把 \((1,1)\) 到达小范围内的点的最小步数打个表:

 7,  , 6, 6,  , 6, 6,  , 6, 6,  , 6, 6,  , 6, 6,  , 6, 6,  , 7,
  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
 7,  , 6, 5,  , 5, 5,  , 5, 5,  , 5, 5,  , 5, 5,  , 5, 6,  , 6,
 7,  , 6, 5,  , 4, 4,  , 4, 4,  , 4, 4,  , 4, 4,  , 5, 5,  , 6,
  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
 7,  , 6, 5,  , 4, 3,  , 3, 3,  , 3, 3,  , 3, 4,  , 4, 5,  , 6,
 7,  , 6, 5,  , 4, 3,  , 2, 2,  , 2, 2,  , 3, 3,  , 4, 5,  , 6,
  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
 7,  , 6, 5,  , 4, 3,  , 2, 1,  , 1, 1,  , 2, 3,  , 4, 5,  , 6,
 7,  , 6, 5,  , 4, 3,  , 2, 1,  , 0, 1,  , 2, 3,  , 4, 5,  , 6,
  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
 7,  , 6, 5,  , 4, 3,  , 2, 2,  , 1, 1,  , 2, 3,  , 4, 5,  , 6,
 7,  , 6, 5,  , 4, 3,  , 3, 2,  , 2, 2,  , 2, 3,  , 4, 5,  , 6,
  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
 7,  , 6, 5,  , 4, 4,  , 3, 3,  , 3, 3,  , 3, 3,  , 4, 5,  , 6,
 7,  , 6, 5,  , 5, 4,  , 4, 4,  , 4, 4,  , 4, 4,  , 4, 5,  , 6,
  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
 7,  , 6, 6,  , 5, 5,  , 5, 5,  , 5, 5,  , 5, 5,  , 5, 5,  , 6,
 7,  , 7, 6,  , 6, 6,  , 6, 6,  , 6, 6,  , 6, 6,  , 6, 6,  , 6,
  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,
 8,  , 7, 7,  , 7, 7,  , 7, 7,  , 7, 7,  , 7, 7,  , 7, 7,  , 7,

中间的 0\((1,1)\),空白点表示这个点不存在。

发现空白点把其他点划分成了 \(2 \times 2\) 的块,并且相邻块的边界点可以互相到达,块内的点也可以互达。

考虑删除空白的行列,然后把 0 点看作 \((0,0)\)。此时相当于若位于 \((x,y)\),令 \(u = (-1)^{1 - x \bmod 2}, v = (-1)^{1 - y \bmod 2}\),则 \((x,y)\) 可一步到达除 \((x + u, y + v)\) 外的七个方向的任一点。如果能走八个方向,答案就是 \(\max(|x|,|y|)\);加了限制后发现主对角线的点有一些特殊,例如 \((-1,-1)\),想到达它必须得先向左再向下,多走一步。那么答案就是 \(\max(|x|,|y|) + [x=y]\)。特判 \((x,y) = (0,0)\)\((1,1)\) 的情况。

E

考虑固定 \(s\) 和每个格子的颜色,最终有多少个石子被染黑。

结论: 任何时刻只有不多于两个极大同色连通块。

证明:\([x,y]\) 为当前的黑连通块,\([y+1,z]\) 为白连通块。如果下一次染 \(x-1\),若 \(x-1\) 为白,则 \([x-1,z]\) 都被染为白;否则 \(x-1\) 被染为黑。下一次染 \(z+1\) 同理。

下文令 \(0\) 为白,\(1\) 为黑,记 \(c_i\) 为第 \(i\) 个格子的颜色。

  • 如果 \(c_1 = c_n = 0\),最终所有石子都会被染白;
  • 如果 \(c_1 = c_n = n\),最终所有石子都会被染黑;
  • 如果 \(c_1 \ne c_n\),不失一般性地,假设 \(c_1 = 1, c_n = 0\)。记 \(x\) 为最大的下标满足 \(\forall i \in [1,x], c_i = c_1\)\(y\) 为最小的下标满足 \(\forall i \in [y,n], c_i = c_n\)。若 \(x + 1 = y\),最终有 \(x\) 个石子被染黑;否则先手肯定要尽快使 \(x\) 被染为黑,后手要尽快使 \(y\) 被染为白,这样中间 \(y - x - 1\) 个石子肯定归某个人了。\([1,x]\) 最后肯定被染黑,\([y,n]\) 最后肯定被染白,如果先手先到 \(x\),即 \(s - x \ge y - s\),则 \([x+1,y-1]\) 归先手;否则归后手。

这样枚举 \(s,x,y\),就得到了一个 \(O(n^3)\) 的做法。

考虑如果 \(s - x \ne y - s\),把 \(c\) 黑白翻转后,最后的染色状态与翻转前互补,则配对后两个状态的答案的和为 \(n\);如果 \(s - x = y - s\)\([x + 1, y - 1]\) 归先手,配对后两个状态的答案和为 \(n + y - x - 1\)

\(ans_s\) 为初始位置为 \(s\) 时不同状态染黑石子数量的总和,可得:

\[ans_s = n2^{n-1} + \sum\limits_{x=1}^n \sum\limits_{y=1}^n [x + y = 2s \land y - x - 3 \ge 0] (y - x - 1) 2^{y-x-3} \]

这样是 \(O(n^2)\) 的。

考虑枚举 \(y - x = 2t\),则 \(x = s - t, y = s + t\),可得:

\[ans_s = n2^{n-1} + \sum\limits_{t=1}^n [1 \le s - t \land s + t \le n \land 2t - 3 \ge 0] (2t - 1) 2^{2t - 3} \]

\(t\) 的范围可以算出是 \([2,\min(n-s,s-1)]\),所以:

\[ans_s = n2^{n-1} + \sum\limits_{t=2}^{\min(n-s,s-1)} (2t - 1) 2^{2t - 3} \]

\(f_i = \sum\limits_{t=2}^i (2t - 1) 2^{2t - 3}\)\(f\) 可以前缀和 \(O(n)\) 求出,可得:

\[ans_s = n2^{n-1} + f_{\min(n-s,s-1)} \]

最后乘 \(\frac{1}{2^n}\) 就是期望。

至此终于以 \(O(n)\) 的时间复杂度做完了本题。

F

考虑判断一个终止态是否可达。如果只有一个棋子连续段那一定可达;否则就存在 \(\ge 2\) 个连续段。此时把放棋子看成删除,那么限制就是如果删除一个孤立的棋子(两边没有棋子)且还有别的格子有棋子,这个棋子的颜色 异于其他连续段的两边棋子的颜色

设第一个被删的段(最后一个放棋子的段)的最后一个棋子颜色为 \(c\),记其补色为 \(c'\)。想删掉这个棋子就必须把其他连续段删成两边都是 \(c'\)。借这个机会可以把所有包含 \(c\) 的段都删除,剩下的段只会包含 \(c'\)。这样的段最多只有一个(多了就寄了),所以这个段就是最后被删除的段(第一个放棋子的段)。

可以发现删棋子和放棋子的方案是一一对应的,所以“存在一个合法的删棋子方案”就是“存在一个合法的放棋子方案”的充要条件。

考虑枚举 \(c\),那么根据以上讨论有如下限制:

  • 第一个被删的段必须包含子序列 \(c\)
  • 最后被删的段 和它两边 必须包含子序列 \(c'c'\)
  • 其他段 和它两边 必须包含子序列 \(c'cc'\)

考虑左边和右边扩充 \(3\) 位后大力 dp。设 \(f_{i,0/1,0/1}\) 表示钦定 \(i\) 不放棋子,当前是否存在 第一个被删的段,当前是否存在 最后被删的段,放棋子数量的最小值。转移大概是如果 \(i-1\) 不放棋子就是 \(f_{i,x,y} \gets f_{i-1,x,y}\),否则枚举 \(i-1\) 所在段的左端点,考虑这一段是第一个被删的段、最后被删的段还是其他段。

直接做是 \(O(n^2)\) 的,考虑优化。容易通过子序列自动机找到以 \(i-1\) 为右端点的第一个合法的左端点,并且发现能转移的点是一段前缀,这个前缀随着 \(i\) 增大而增大。分三类记一下前缀最小值即可。这样是 \(O(n)\) 的。

ARC114

A

暴力枚举是否选质因子即可。

B

符合要求的集合一定是由若干环构成的,而一个连通块有一个环。于是答案就是 \(2^c - 1\),其中 \(c\)\(i \to f_i\) 的图中弱连通块数量。

C

智障了,做不出来,只会暴力 \(O(n^5)\)

考虑给定 \(A\),如何计算 \(f(A)\)。考虑每次取序列的最小值,把整个序列都赋成这个值,然后删去最小值的位置,把整个序列分成若干段再递归处理。

考虑拆贡献。设 \(F(i,j)\) 为钦定 \(a_i = j\)\(i\) 可以成为某个段的左端点的方案数。可以发现 \(i\) 可以成为某个段的左端点的充要条件是不存在 \(k \in [1,i-1], a_k = j \land \min\limits_{p=k}^i \ge j\)

考虑容斥,总方案数是 \(m^{n-1}\),把不合法的方案减掉,那么:

\[F(i,j) = m^{n-1} - \sum\limits_{k=1}^{i-1} m^{n-i+k-1} \times (m-j)^{i-k-1} \]

表示每次枚举右边第一个满足条件的 \(k\)

\(f_{i,j} = \sum\limits_{k=1}^{i-1} m^{k-1} \times (m-j)^{i-k-1}\),则 \(f_{i,j}\) 可以递推,\(f_{i,j} = f_{i-1,j} \times (m-j) + m^{i-2}\)

D

挺有意思的题。

首先显然地,一个棋子不会走回头路。于是一个棋子沿着边走的效果就是区间异或。

更进一步,设 \(s_i\)\(i-1 \to i\) 的边颜色与 \(i \to i+1\) 的边颜色是否相同(差分),相当于对于每个 \(i\) 都选择 \(s_{a_i}\)\(s_{x_i}\),将它们异或上 \(1\)\(x_i\) 任选),代价为 \(|a_i - x_i|\),最后要求恰好 \(k\) 个位置 \(t_1,t_2,...,t_k\)\(1\),求最小代价。

\(s_{a_i}\) 的异或操作可以事先处理。操作后需要被 \(a_i\) 异或奇数次的位置可知,设这样的位置有 \(m\) 个,分别为 \(b_1,b_2,...,b_m\)。现在问题又变成了,数轴上有 \(n\) 个红点 \(a_1,a_2,...,a_n\)\(m\) 个蓝点 \(b_1,b_2,...,b_m\),红点和红点可以匹配(随便选一个它们之间的点互相抵消),红点和蓝点也可以匹配,要求每个蓝点和每个红点都要被匹配,每对匹配的价值是坐标之差的绝对值,求最小代价。

考虑 \(n = m\) 怎么做。这个是个经典问题,\(a\)\(b\) 排序后每对匹配相交一定不优,于是答案就是排序后 \(ans = \sum\limits_{i=1}^n |a_i - b_i|\)

现在 \(n > m\)(如果 \(n < m\) 就无解),不妨沿用 \(n = m\) 时的结论。不难得出两个红点仅当它们在红点之中相邻才能形成匹配。发现数据范围允许 \(O(nm)\),大力 dp,设 \(f_{i,j}\) 为排序后前 \(i\) 个红点和前 \(j\) 个蓝点都能匹配的代价最小值。有转移:

\[f_{i,j} \gets \min(f_{i-1,j-1} + |a_i - b_j|, f_{i-2,j} + a_i - a_{i-1}) \]

答案为 \(f_{n,m}\)

E

考虑拆贡献,分别考虑每条直线的贡献。

注意到一条直线最多被选一次,因此这条直线的贡献就是它被选中的概率。

\(x_1 = \min(h_1,h_2), x_2 = \max(h_1,h_2), y_1 = \min(w_1,w_2), y_2 = \max(w_1,w_2)\)。考虑 \(x = i\) 的一条直线:

  • 如果 \(i \in [x_1,x_2)\) 就假设它不可能被选,最后答案加上 \(1\)
  • 如果 \(i \in [1,x_1) \cup [x_2,h)\),如果这条直线被选,任意一条在 \([x_1,x_2) \cup [y_1,y_2)\) 的直线和在 \(i\)\([x_1,x_2)\) 的直线都不能在 \(x = i\) 这条直线前选。设这样的直线数量为 \(x\),那么概率为 \(\frac{1}{x+1}\)

F

这题居然是之前某场模拟赛(contest 701)的 T1……(@Vidoliga 场切但是被卡常/bx)

下面记 \(m\) 为原题面中的 \(K\)\(a_i\) 为原题面中的 \(P_i\)

不难发现后手的策略是把所有段按照段的第一个数从大到小排序接在一起。

考虑若 \(a_1 \le m\),则先手能把所有 \(\le m\) 的数都作为段头。

\(a_1 > m\),操作后的排列字典序一定大于等于原排列(后手可以选择不动)。于是先手想让与原序列的 \(\text{LCP}\) 尽量大。

预处理出以 \(a_1\) 开头,\(a_i\) 结尾的 \(\text{LDS}\),记为 \(f_i\)。考虑枚举 \(i\),那么 \(i\)\(i\) 前面有 \(f_i\) 个元素可以作为段的开头,设它们为 \(1 = p_1 < p_2 < \cdots < p_{f_i} = i\),则后面还需要 \(m - f_i\) 段。找到后面第一个位置 \(k\) 使得 \(\sum\limits_{x=k+1}^n [a_x < a_i] = m - f_i\),那么 \(k\) 就是前面分成 \(f_i\)\(p_1 \sim p_{f_i}\) 这种方案的 \(\text{LCP}\)。注意如果 \(\text{LCP}\) 相同,则先手想让 \(k + 1 \sim n\) 还需要分的段尽量少(即 \(m - f_i\) 尽量小)。

\(k\) 可以使用主席树+二分,因此时间是 \(O(n \log^2 n)\) 的。

ARC111 (VP)

赛时大概 40min 做出 A~C,D 发现要求哈密尔顿路径觉得很不可做,自闭了 0.5h。出场的时候发现根本不用……最后是 Rank 322, Performance 2051

A

快速幂,但是对 \(m^2\) 取模,这样就能知道商和余数。

B

连边 \((a_i,b_i)\),然后对每个连通块分别考虑。如果这个连通块是一棵树那么贡献是 \(sz - 1\),否则是 \(sz\)

C

对于每个置换环分别考虑(自环不用管)。如果存在 \(i\) 使得 \(a_i \ge b_{p_i}\) 就无解,否则每次换最小的。

D

纯纯脑瘫题。

考虑边 \((u,v)\)

  • \(c_u < c_v\),方向一定为 \(u \gets v\)
  • \(c_u > c_v\),方向一定为 \(u \to v\)
  • \(c_u = c_v\),方向是环的方向。考虑对于这些边随便建出一棵生成树,边的方向是访问的方向。这样是合法的。

E

若区间无解,则一定满足 \(ci - bi < d\)。设 \(n = \left\lfloor\frac{d-1}{c-b}\right\rfloor\),那么 \(i \le n\)

上面保证了 \([a+bi,a+ci]\) 最多只有一个解。那我们用总个数减去解的个数即可。

解的个数为:

\[\sum\limits_{i=0}^n \left\lfloor\dfrac{ci+a}{d}\right\rfloor - \sum\limits_{i=0}^n \left\lfloor\dfrac{bi+a-1}{d}\right\rfloor \]

用类欧计算即可。

F

挺有意思的计数。

计数感觉很难做,不妨转成期望,期望又可以转成概率之和。

考虑枚举 \(w \in [0,m-1]\),把 \(> w\) 的数设为 \(1\)\(\le w\) 的数设为 \(0\)。那么期望就是所有 \(w\)\(a_i\)\(1\) 的概率之和。对于一个 \(i\),只有以下的操作能改变 \(a_i\),称以下操作为 \(i\)关键操作

  • 满足 \(i \in [l,r], v < w\) 的操作 \(1\)
  • 满足 \(i \in [l,r], v \ge w\) 的操作 \(2\)

\(p_i\) 为一个操作能为 \(i\) 的关键操作的概率,分别考虑它是否包含 \(i\)\(v\) 是否 \(< w\),是否为操作 \(1/2\),那么:

\[p_i = \dfrac{i(n-i+1)}{\dfrac{n(n+1)}{2}} \times (\dfrac{1}{2} \times \dfrac{m}{2m+1} \times \dfrac{w}{m} + \dfrac{1}{2} \times \dfrac{m}{2m+1} \times \dfrac{m-w}{m}) = \dfrac{2mi(n-i+1)}{n(n+1)(2m+1)} \]

\(f_{w,t,i}\)\(t\) 时刻 \(a_i\)\(1\) 的概率,则:

\[f_{w,t,i} = [1 - (1-p_i)^t] \times \dfrac{m-w-1}{m} \]

\(g_{t,i}\)\(t\) 时刻 \(a_i\) 的和,枚举 \(w\) 求和,即:

\[g_{t,i} = \sum\limits_{w=0}^{m-1} f_{w,t,i} = \sum\limits_{w=0}^{m-1} [1 - (1-p_i)^t] \times \dfrac{m-w-1}{m} = \dfrac{m-1}{2} \times [1 - (1-p_i)^t] \]

枚举第 \(t+1\) 个操作为 \(3\) 操作,每个位置拆贡献,答案即:

\[ans = \sum\limits_{t=0}^{q-1} \sum\limits_{i=1}^n \dfrac{i(n-i+1)}{\dfrac{n(n+1)}{2}} \times \dfrac{1}{2m+1} \times \dfrac{m-1}{2} \times [1 - (1-p_i)^t] \]

\[= \sum\limits_{i=1}^n \dfrac{i(n-i+1)}{n(n+1)} \times \dfrac{m-1}{2m+1} \times \sum\limits_{t=0}^{q-1} [1 - (1-p_i)^t] \]

\[= \sum\limits_{i=1}^n \dfrac{i(n-i+1)}{n(n+1)} \times \dfrac{m-1}{2m+1} \times (q - \dfrac{1-(1-p_i)^q}{p_i}) \]

至此可以 \(O(n \log P)\) 计算,\(P\) 为模数。

ARC125

A

首先把 \(a_1\) 换成异色,然后左右摇摆即可。

B

\(x^2 - y = z^2\)\((x+z)(x-z) = y\),枚举 \(x-z\) 即可计数。

C

\(a_1\) 之前肯定不能插比 \(a_1\) 小的数,于是开头肯定是 \(a_1\);设 \(x\) 为当前没输出且 \(x < a_i\) 的最小 \(x\)(如果 \(x\) 不存在就跳过),在 \(a_i\)\(a_{i+1}\) 之间插一个 \(x\) 即可。

最后倒序输出还没被输出的数即可。

D

可以发现 \(s\) 仅出现一次的充要条件为:

  • \(\forall i \in [1,k-1]\)\(s_i\)\(s_{i+1}\) 中不存在 \(s_{i+1}\)
  • \(s_1\) 前不存在 \(s_1\)
  • \(s_k\) 后面不存在 \(s_k\)

考虑先满足前两个条件,最后一个条件在统计答案时满足。

\(f_i\) 为以 \(i\) 结尾的满足前两个条件的子序列个数,有转移:

\[f_i = \sum\limits_{j=1}^n [pre_j \ge pre_{a_i}] f_j \]

树状数组存 \(f_{pre_i}\) 即可。时间复杂度 \(O(n^2)\)

ABC

ABC299 (Contest)

赛时切 A~G,小号 Rank 47, Performance 2400,但是 unr 了。

A

记录两个 | 和一个 * 的位置。

B

模拟即可。

C

找到连续的 o 的最大长度即可,注意整个字符串同为一个字符就无解。

D

维护一个区间 \([l,r]\)(初始为 \([1,n]\)),每次二分区间长度减半,并且满足 \(s_l = 0, s_r = 1\) 即可。

E

计算出两两距离,所有与 \(p_i\) 的距离 \(< d_i\) 的点都要染白。简单判断即可。

F

每次枚举分界点 \(k\),钦定 \(k\) 必须作为第一个 \(T\) 被选。设 \(f_{i,j}\) 为第一段的指针在 \(i\),第二段的指针在 \(j\)\(T\) 的方案数。转移枚举下一个字符填什么即可。可以用子序列自动机做到 \(O(n^3m)\)\(m\) 为字符集大小。

G

考虑逐位确定。维护一个左端点 \(l\),每次二分 \(1 \sim mid\) 是否存在可行的位置。那么就要求 \(1 \sim mid\) 中在 \(l\) 之后出现的第一个在范围内的数的位置 \(<\) 其他数最后一次出现位置的最小值。线段树即可。

AGC

posted @ 2023-04-16 13:44  zltzlt  阅读(152)  评论(1编辑  收藏  举报