ARC/CF记录
\(\color{blue}★\) 表示巧妙但有点单薄的题。
\(\color{red}★\) 表示分析过程曲折复杂,且有启发的题。
\(\color{yellow}★\) 表示两者兼有,神仙题!
❤️ 我也不知道为什么但就是比较喜欢
上述标记和题目难度没有必然关系。
ARC187
A
略
B
发现,对于一对 \((i,j)\) 如果满足 \(a_i\le a_j\),那么 \(i\sim j\) 每个点都在一个连通块里。因为对于 \(i<k<j\),要么 \(a_i\le a_k\) 要么 \(a_k\le a_j\)。
所以有 \((i,i+1)\) 不连边的条件:
令 \(A\) 里满足该条件的 \(i\) 共有 \(x\) 个,那么 \(f(A)=x+1\)。
于是对于每个 \(i\) 去考虑多少种方案中 \((i,i+1)\) 不连边。令 \(p_i\) 表示 \(1\sim i\) 的最小值,\(s_i\) 表示 \(i\sim n\) 的最大值(\(-1\) 分别视为 \(m\) 和 \(1\))。
考虑枚举 \(1\sim i\) 的最小值 \(x\),则 \(i+1\sim n\) 的最大值必须 \(<x\),所以 \(s_{i+1}<x\le p_i\)。
考虑前半部分,如果 \(x\ne p_i\),那么必有一个 \(-1=x\)。考虑看哪些 \(-1=x\),则剩下的只要 \(>x\) 即可。令 \(q\) 为 \(1\sim i\) 中 \(-1\) 的个数,所以方案为:
否则如果 \(x=p_i\),那么所有 \(-1\) 只要 \(\ge x\) 即可,即为 \((m-x+1)^q\)。
考虑后半部分,由于只要 \(<x\),所以在 \(1\sim x-1\) 中任选,即为 \((x-1)^{p-q}\),\(p\) 为 \(-1\) 的总数。两部分相乘即为总方案数。
ARC201
A
令 \(cnt_a\) 为执行 \(a+b\) 的操作数,\(cnt_b\) 为执行 \(b+c\) 的操作数,则要最大化 \(\min(cnt_a,cnt_b)\)。
发现减少一个 \(cnt_a\) 最多只会增加一个 \(cnt_b\),所以可以先最大化 \(cnt_a\) 后调整。
对于 \(i\),如果 \(a_i+c_i\le b_i\),那么 \(cnt_a\) 和 \(cnt_b\) 分别加上 \(a_i\) 和 \(c_i\) 即可;否则优先处理 \(cnt_a\),令 \(x=\min(a_i,b_i)\),\(y=\min(b_i-x,c_i)\),则分别加上 \(x,y\) 即可,同时减少 \(cnt_a\) 以增加 \(cnt_b\) 的次数最多为 \(\min(x,c-y)\)。
最后处理,如果 \(cnt_a\le cnt_b\),不需要减少了,答案就是 \(cnt_a\)。否则,令 \(s\) 为最多减少的次数,如果 \(cnt_a-s\ge cnt_b+s\),则答案为 \(cnt_b+s\),否则就是 \(\frac{cnt_a+cnt_b}{2}\)。
B
不断执行如下操作(每个体积都可以添加无限个价值为 \(0\) 的物品):
- 若 \(w\) 为偶数,那么可以将体积为 \(1\) 的物品合并为体积为 \(2\) 的物品,并将 \(w\) 和所有物品体积除 \(2\) 显然不影响答案。合并的时候显然将价值从大到小相邻合并最优。
- 若 \(w\) 为奇数,那么将体积为 \(1\) 的物品中最大价值取出,再变成第一种情况即可。
C
首先容易想到建出 Trie,考虑统计答案。
令每个字符串的结尾点为关键点,将 Trie 上只有一个儿子的点补上一个叶子,于是问题转换成选出若干个关键点,使得所有根到叶子的路径都经过选出的点的方案数。
这东西可以树形 dp,在线每次修改只会修改一条链。
D
如果将 \(A\) 和 \(B\) 递增排序,那么最优的方案肯定是选取一个点 \(s\) 分成 \([1,s-1]\) 和 \([s,r]\) 两段区间,然后每段区间 \(a_i\) 和 \(b_i\) 交替相加。
要求 \([s,r]\) 区间 \(a_i\) 和 \(b_i\) 交替相加结果都 \(\ge m\) 且 \(s\) 最小,因为 \(s\) 越大 \(\max(a+b)\) 越大。然后直接二分即可。
CF2150
D
首先思考哪种状态是合法的,设 \(p_i\) 表示 \(i\) 位置上的人数,容易发现
- \(p_i\) 的值是一段连续区间,假设是 \([L,R]\)。
- \(\forall i\in (L,R)\),\(p_i\) 是奇数。
是合法的充要条件,模拟过程可得到。
于是考虑统计权值和,假设 \(L=1\),则枚举 \(R\),不妨换一种形式表达 \(p\):
- \(p_1=2q_1+x(1\le x\le 2)\),
- \(p_i=2q_i+1(1<i<R)\),
- \(p_R=2q_R+y(1\le y\le 2)\)。
考察 \(q_i\) 的性质,容易发现 \(\sum q_i=\frac{n-x-y-(R-2)}{2}\),然后求 \(\sum 2q_i a_i\)。然后发现 \(q_i\) 是轮换对称的,所以 \(q_i\) 的期望值就是 \(\frac{n-x-y-(R-2)}{2R}\),于是就变成 \(w \frac{n-x-y-(R-2)}{R}\sum a_i\),其中 \(w\) 为 \(q_i\) 的方案数,用隔板法可求。
F
第一步选 \(k=3\),因为 wxr 说加的边最多。
然后考虑第二步直接选 \(\lceil\frac{d}{2}\rceil+1\),其中 \(d\) 为原图任意一棵生成树的直径,接下来说明对于每个点对一定存在长度为 \(p=\lceil\frac{d}{2}\rceil\) 的路径。
- \(dis_{u,v}\ge p\),把树上 \(u,v\) 路径拿下来,先若干步 \(2\) (由于第一步是可行的)后再若干步 \(1\) 即可。
- \(dis_{u,v}<p\),考虑找到点 \(x\) 使得 \(|u\leadsto x\bigcup u\leadsto v|=p+1\),这样的 \(x\) 是一定存在的,因为考虑距 \(u\) 最远的点,其距离一定是 \(\ge p\) 的(直径某一端点 \(t\))。然后考虑构造,分类讨论即可。
CF2152
F
首先把条件改一下,因为 \(y\) 有序,假设选了 \(p_1,p_2,\cdots,p_k\),则等价于要求 \(\forall i\ge 3,y[p_{i}]-y[p_{i-2}]>z\)。
所以考虑对于每个 \(i\),找到前面第一个 \(j\) 满足 \(y_i-y_j>z\),记为 \(t_i\),则 \(p_{i-2}\le t[p_i]\)。
然后再考虑,区间 \([l,r]\) 选出来的子集一定可以包含 \(\{r-1,r\}\),否则将后两个替换为 \(r-1\) 和 \(r\) 一定不劣,于是考虑从 \(r-1\) 和 \(r\) 开始跳 \(t\),这个可以倍增预处理,如果跳到某个位置相同后,则要将其中一个数 \(-1\),然后变成子问题。
G
首先将题目要求转换为,有多少个 \(u\) 满足 \(a_u=1\) 且子树内没有其他 \(1\)。然后有子树,有翻转,考虑括号序。将 \(a_u=1\) 进来和出去分别看为 \(1\) 和 \(3\),\(a_u=0\) 看为 \(0\) 和 \(2\),则转为求最长的 \(131313\cdots\),用线段树维护即可。对于子树翻转,交换 \(1,0\) 和 \(2,3\) 即可。
CF2159
D2
首先需要注意几个关键性质:
- 选取的右端点一定是后缀最小值,不然替换后一定不劣。
- 任何区间代价都 \(\le 2\log V\),形如 \([1,2]\)、\([2,4]\)、\(\cdots\)。
- 增加一段的代价 \(\le 3\),如果 \(\ge 4\),一定能分成两段,使得分别为 \(2\) 和 \(\lceil \frac{x}{2}\rceil\)。
考虑对于一个右端点 \(i\),求出 \(w(l,i)\le j\) 的最左的 \(l\),记为 \(f_{i,j}\),考虑然后求。即枚举左边加入段的代价,设 \(L_{i,j}\) 表示 \(\mathtt{cost}(l,i)\le j\) 的最左的 \(l\),那么容易转移 \(f_{i,j}=\min \{L_{f_{i,j-k}-1,k}\}\)。
差分算答案即可。
E
先考虑求 \([x^k]F(n)\)。直接做显然不好做,注意到 \(n\le 3\times 10^5\),考虑分块。
假设块长为 \(B\),先递推算出 \(F(0\sim B-1)\),这一部分时间复杂度 \(O(B^2)\)。然后要求出任意一个 \(F(n)\),还要算出 \(F(0,B,2B,\cdots,\lfloor \frac{N}{B}\rfloor B)\),假设当前要求 \(F(m)\)。
由于 \(F(m)=f^m\),其中 \(f=ax^2+bx+c\),考虑一种常见思路,即先求导。
考察 \([x^{k-1}]\)(以下记 \(F[k]\) 表示 \([x^k]F(m)\)):
所以先求出 \(F[0]\) 和 \(F[1]\) 便可递推算了,这一部分时间复杂度 \(O(\frac{N^2}{B})\)。
然后每次询问 \(n,k\),只需要算 \(F(n\bmod B)\cdot F(\lfloor \frac{n}{B}\rfloor B)\) 的第 \(k\) 项,假设两个多项式长度分别为 \(p,q\),则这一部分时间复杂度是 \(O(\min(p,q))=O(B)\) 的。所以取 \(B=\sqrt N\) 最优。
现在是求前 \(k\) 项的和,只需要将 \(F(0,B,2B,\cdots)\) 做一遍前缀和即可。
F
将路径上的点拿出来建序列,则 \(f\) 是一个滑动窗口。
首先发现由 \(f(l,p\sim p+l-1)\) 构成的函数值是一个单谷函数,证明考虑如果 \(f(l,p)<f(l,p+1)\),则 \(f(l,p+1)\) 为第一次出现,将对后 \(l\) 个产生贡献。
于是枚举 \(l\),分成 \(\lceil \frac{n}{l}\rceil\) 段,考虑对每一段找到其极值点,然后放到优先队列里每次往左右扩展即可。
考虑二分,首先考虑将区间里的数从大到小覆盖未覆盖的数,区间长度为 \(l\),则对于一段平台,如果位于谷底左侧则一定作为后缀出现,否则作为前缀出现。假设当前二分区间为 \([L,R]\),对于中点 \(mid\) 其函数值为 \(v=f(l,mid)\),如果 \(v\) 第一次出现的位置为 \(s\ge L\),则一定是作为前缀出现,否则是后缀,根据此移动 \(L,R\) 即可。由于谷底可能是中间一段区间,所以需要注意二分写法。
总询问次数 \(O(n\log^2 n+m)\)。
CF2154
D
出得好。注意到每次割掉一个叶子需要考虑的最少,只需要保证当前不在这个点即可。联想到题目 \(3n\) 的限制,考虑当前的深度的奇偶。执行 \(1\) 操作后奇偶一定会发生变化,所以只需要让猫猫当前的深度跟当前叶子的深度不一样即可。
F1
由于 \(n\le 3000\),考虑直接枚举 \(k\)。先想如何判断一个序列是否满足,即对于 \(a_i\le k\),必须要求 \(a_i\) 前面有 \(a_i-1\) 个数也 \(\le k\);对于 \(a_i>k\),必须要求 \(a_i\) 前面有 \(a_i-k-1\) 个数也 \(>k\)。
在知道这个过后,容易通过组合计数算出合法的方案数。
AGC074
A
B
考虑不变量。首先很显然的是交换不会改变和,然后再注意到由于长度相等,所以等价于两个区间里的 \(1\) 下标分别加和减定值 \(x\),所以交换不会改变 \(1\) 位置的下标和。
容易发现上面两个条件合起来是充要的。考虑怎么构造,不妨设 \(f_i\) 和 \(g_i\) 分别表示 \(A\) 第 \(i\) 个 \(1\) 的下标和 \(B\) 第 \(i\) 个 \(1\) 的下标,考虑最终使 \(f_i=g_i\)。将其分成 \(f_i<g_i\) 和 \(f_i>g_i\) 两类,相当于第一类的 \(1\) 要向右移,第二类要向左移。于是容易想到将两类对应起来,为了不影响后续操作,第一类要从后往前改,第二类要从前往后改。每次可以将 \(|f_i-g_i|\) 相差较小的那个归位,那么操作次数是 \(O(cnt_1)\) 的,如果 \(cnt_1>cnt_0\) 翻转即可。
C
神奇构造。考虑 \(\text{or}\) 一个数的本质,相当于将 \(p\) 中这些位抹除,于是想构造出 \(p_1\le p_2\le p_3\le \cdots\),那么 考虑递归构造。
先考虑 \(n\) 是奇数,先将 \((n-1)/2\) 构造出来,并复制一份,记当前最高位为 \(d\),将第二份 \(d+1\) 位设为 \(1\),显然原来 LIS 为 \(i\) 的变为 \(2i\) 了,考虑通过第 \(n\) 个数来调整出 \(2i+1\)。考虑将第 \(n\) 个数设为 \(p_{n-1} \text{ or }2^{d+2}\),然后把 \(a_{2i+1}\) 设为 \(a_{2i}\),\(a_{2i} =a_{2_i}\text{ or }2^{d+2}\),即是否抹去 \(p_n\) 的最高位。
\(n\) 是偶数只需在 \(n-1\) 的基础上加一个元素即可。
AGC002
F
先考虑判定。容易发现一个充要条件,即对于任意前缀颜色 \(0\) 的个数需要大于等于其他颜色种类数。于是考虑设 \(f_{i,j}\) 表示已经放了 \(i\) 个颜色 \(0\) 的球,\(j\) 种其他颜色的球的方案数。转移只需考虑下一个放哪种球,放非颜色 \(0\) 的球时要一次放满 \(k-1\) 个,通过组合数算即可。
AGC006
D
看到中位数,考虑二分+01序列。即新序列 \(b_i=[a_i\ge x]\)。考虑这个01序列的变化规律,手玩容易发现当相邻两个 \(b\) 相等时会向上拓展,直到被其他相邻段合并。然后再观察到影响答案的是距离终点最近的相邻段,并且唯一,于是这道题就做完了。
AGC007
C
没啥思路,考虑手玩一下。比如当 \(n=3\) 时:

考虑变到 \(n=2\) 每段长度的期望,容易得到
发现这又是一个等差数列,并且分析第一段得到首项为 \(\frac{(2n+2)d+5x}{2n}\),第二段减第一段得到公差为 \(\frac{(2n+4)x}{2n}\)。于是只需要算出每一步的期望长度 \(\frac{\sum_{i=0}^{2n-1}(d+ix)}{2n}=d+\frac{2n-1}{2}x\)。

浙公网安备 33010602011771号