CF1396

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]) 中所有怪都消灭的方案。

那么转移有两种:

  1. (i-1) 处转移过来,这个时候我们要直接消灭 (i) 处的怪物才能保证留在 (i) 处。
  2. 枚举环的起点 (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:)

题目太神仙了,先咕咕咕着。

原文地址:https://www.cnblogs.com/Soulist/p/13653490.html