CF1396
A [* easy]
给定 (n) 个数 (a_i),操作 (3) 次,每次选择一个区间,给区间内每个数增加 ( m len) 的倍数的值。
使得所有数为 (0)
(1le nle 10^5)
( m Sol:)
考虑这样操作,先操作 ([1,n]),再操作 ([1,1]) 和 ([2,n]),注意到当 (n e 1) 时有 (n-1) 和 (n) 互质,所以可以构造得到解。
B [* easy]
给定 (n) 个堆石头,每堆有 (a_i) 个石子,Alice 和 Bob 轮流操作,每次操作为:选择与对方上一轮操作选择的不同的一堆石头,拿走其中一个石子。(第一轮任意)
求 Alice 和 Bob 谁必胜。
(nle 100,a_ile 100)
( m Sol:)
注意到如果存在一堆石头满足 (sum a_i<2 imes a_x),那么 Alice 可以一直拿这堆石头。所以 Alice 获胜。
否则由于假设 Alice 操作后变成了这种情况,那么 Bob 必胜,所以双方都会避免这个情况发生,所以所有石头都会被取完,那么根据 (sum a_i) 的奇偶性判定答案即可。
C [* easy]
题意很复杂。
大概先画一下你的行动路线,发现大概是一条链上挂了一点环,然后最后一个环可以不走回来的这样的一个东西。
所以就可以考虑 dp 了,设 (f_i) 表示当前到位置 (i),将 ([1,i]) 中所有怪都消灭的方案。
那么转移有两种:
- 从 (i-1) 处转移过来,这个时候我们要直接消灭 (i) 处的怪物才能保证留在 (i) 处。
- 枚举环的起点 (l+1),那么每个位置的怪物可以直接以最小花费解决(注意我们会路过每个怪物至少两次)预处理最小花费,其前缀和,转移为 (f_i=f_l+S_n-S_{l}+(i-l-1) imes 3d+d)
然后边界情况会需要一点特判比较麻烦,所以可以直接认为 (f_0=-d)(相当于增加了一段起点)
然后对于 (f_n) 单独转移一下即可,第二种转移显然可以拆开记录前缀 (min)
D [* hard]
给定 (n,k,L) 表示有一个大小为 (L imes L) 的矩形,内部有 (n) 个点,每个点有一个颜色 (c_i),位于 ((x_i,y_i)),保证 (1le c_ile k) 且每种颜色至少有一个点,你需要求有多少个矩形满足其内部含有所有颜色的点。
(kle nle 2000,Lle 10^9)
( m Sol:)
将元素进行离散化现在我们的矩形大小为 (n imes n) 了。
考虑一维的情况如何处理,对于每个 (l) 维护 (f(l)) 表示最小的 (r) 使得 ([l,r]) 合法。那么此时贡献为 ((L-r+1))
处理 (f(l)) 可以预处理每个颜色的下一个位置,取 (max) 即可。
接下来考虑处理二维的情况,我们枚举矩形的一个边界(某一行),然后先对这一行做一维的处理,然后考虑将其拓展为二维的情况,每次在某个位置插入一个颜色 (c),这会使得答案改变,影响的区间 ([pre_c,i]) 这个区间内的答案可能会变小。然而我们计算答案为取 (max) 所以难以解决。
不妨反过来考虑,先处理出最终的答案,然后逆着处理,每次删除一个新颜色 ([pre_c,i]) 的答案会取 (max),然后每次查询一次全局贡献和。显然这是可以使用线段树维护的,然而直接取 (max) 要写某科技树?所以好像不是很好做。
事实上观察到 (f(l)) 是单调的,所以直接写一个线段树二分找到对应区间,然后执行区间覆盖即可,复杂度为 (mathcal O(n^2log n))
不过离散化后处理感觉很难写,代码先咕咕咕着。
E
给定一棵 (n(n m ~is ~even)) 个点的树 (T) 以及常数 (k)。现生成一张 (n) 个点的完全图 (G),对于每对点 ((u,v)) 连接一条边权为 ( extrm{dist}(u,v)) 的边。
你需要求这张图的一个完美匹配使得边权和恰好为 (k);输出一组方案或确定不存在解。
完美匹配的定义是:一组边集,满足每个点都恰好被覆盖一次。
(nle 10^5,kle n^2)
( m Sol:)
题目太神仙了,先咕咕咕着。