记录「十一月做题记录」

水题记录。


11.2

P5663 加工零件

题面

题解

发现若 (s)(t) 一条路径长度为 (d) ,那么可以通过在一条边上反复折返使得存在一条长度为 (d+2k,kin N) 的从 (s)(t) 的路径。分路径长度的奇偶求出最短路即可。


11.3

P2515 [HAOI2010]软件安装

题面

题解

发现是一个基环树森林,环上的点要么都选,要么都不选,于是可以把环缩成一个点。

缩完点后的图一定是一个森林,可以把所有树根连接到一个虚拟节点上形成一棵树。这样直接树形DP是 (O(nm^2)) 的。可以用DFS序优化到 (O(nm))

在树上DFS,求出后序遍历的DFS序,在DFS序上DP。

(mathrm{dp}(i,j)) 表示考虑到后序遍历的 (i) 号结点,背包容量为 (j) 时,所能取得的最大价值。设 (mathrm{size}_i) 表示以 (i) 为根的子树的大小。

  • 若取物品 (i) ,则可以取它的子树,所以答案为 (mathrm{dp}(i-1,j-1)+v_i)
  • 若不取物品 (i) ,则不可以取它的子树,则答案为 (mathrm{dp}(i-mathrm{size}_i,j))

综上可得 (mathrm{dp}(i,j)=max(mathrm{dp}(i-1,j-w_i)+v_i,;mathrm{dp}(i-mathrm{size}_i,j)))

P5858 「SWTR-03」Golden Sword

题面

题解

(mathrm{dp}(i,j)) 表示考虑到第 (i) 个原料,当前锅中有 (j) 个原料的最大耐久度之和。则有:

[mathrm{dp}(i,j)=max_{j-1leq kleq min(w,j+s-1)}{mathrm{dp}(i-1,k)}+j imes a_i ]

单调队列优化即可。

P5020 货币系统

题面

题解

完全背包。

将面值从小到大排序,依次加入。若当前的面值能用之前的面值表示,那么这个面值就是无用的,可以舍去。维护一个背包即可。

P4878 [USACO05DEC]Layout G

题面

题解

差分约束。

判断有无解是基础操作,重点是后两个询问。

因为必须要满足三角形不等式,所以其实从 (1)(n) 的路径长度其实是确定的。具体一点,若有多个点能够到达点 (v) ,为了满足三角形不等式,必须选择这些点中 (dis_u+w(u,v)) 最小的点走,发现这就是最短路。

从虚拟源点跑一遍最短路判断有无解,再从 (1) 号点跑最短路,得出的 (dis_n) 即为所求。

CF804B Minimum number of steps

题面

题解

手玩几组数据不难发现:(a) 的数量总是不变的。我们从左往右扫这个字符串,若遇到一个 (b) ,将它前面的 (a) 全部移到它后面去。因为扫到这个 (b) 时,前面所有的 (a) 已经通过前面的 (b) 移到了当前字符串的末尾,这样保证了新加入的 (b) 一定能够将它之前的 (a) 移到后面去。

通过手玩数据,不难发现另一个结论:若 (b) 前面有 (c)(a) ,那么将这 (c)(a) 全部移到后面去的操作次数为 (sum_{i=1}^c2^{i-1}) 。预处理出这个和式,统计答案。


11.4

CF1366D Two Divisors

题面

题解

假如已经选出了两个因数 (x,y) ,满足 (gcd(x+y,a)=1)

(d=gcd(x,y)) ,设 (x'=frac{x}{d},y'=frac{y}{d}) ,可以得到式子 (gcd(d imes (x'+y'),a)=1) 。因为 (x,y) 都是 (a) 的因数,那么 (d) 也是 (a) 的因数,则 (gcd(d imes(x'+y'),a)geq d) 。为了满足 (gcd(d imes (x'+y'),a)=1) ,一定有 (d=1) ,则有 (xot y)

(a) 分解质因数,(a=prod_{i=1}^mp_i^{c_i}) ,取 (x=p_1^{c_1},y=frac{a}{x}) 即可。

P5651 基础最短路练习题

题面

题解

由所有简单环的异或和都为 (0) 可知,两点之间的所有简单路径的长度都是相同的。那么只需要随意求出一条路径即可。

CF1445D Divide and Sum

题面

题解

考试的时候没推出来/kk。

(a) 数组升序排序,令 (L={a_1,a_2,cdots,a_n},R={a_{n+1},a_{n+2},cdots,a_{2n}})

有结论:将 (a) 分成任意两个集合 ((p,q)) ,对于任意的 (i)(x_i)(y_i) 不会同时在 (L) 或者 (R) 中。

证明:

假设 (x_i)(y_i) 同时在 (L) 中。因为 (p,q) 中元素单调,那么有 (i) 个元素小于等于 (x_i) ,有 (n-i+1) 个元素小于等于 (y_i) ,并且它们互不重合,由于小于等于 (x_i,y_i) 的元素只能在 (L) 中,得出 (L) 中有 (n+1) 个元素,与上文矛盾。

证毕。

那么 (f(p,q)) 的值就是一定的,答案即为:

[f(p,q) imes {2 imes n choose n} ]


11.5

P2662 牛场围栏

题面

题解

同余最短路板子题。

求出 (d_i) 后,答案即为:

[max_{0leq i<mathrm{base}}d_i-mathrm{base} ]

CF1443B Saving the City

题面

题解

相邻的两个极长 (1) 串只有两种消除方法,要么花费 (2 imes a) 的代价分别消除,要么先将两串中间的 (0) 串变为 (1) ,再一起消除。在两种方法中取最优即可。

P5520 [yLOI2019] 青原樱

题面

题解

考虑先提出放树苗的 (m) 个位置,剩下 (n-m) 个位置,树苗要放在这些位置的 (n-m+1) 个空位中,所以答案为 (A_{n-m+1}^m)

P2467 [SDOI2010]地精部落

题面

题解

(f_{i,j}) 表示使用数 (1sim i)(j) 在第一个位置且为山峰的方案数。有转移:

  • (j-1) 不在第二个位置,那么交换 (j)(j-1) 依然合法,则 (f_{i,j}=f_{i,j-1})
  • (j-1) 在第二个位置,考虑去掉第一个位置的数 (j) ,剩下有互不相同的 (i-1) 个数,且 (j-1) 在第一个位置且为山谷。为了使 (j-1) 变成山峰,考虑将这 (i-1) 个数中每一个数 (x) 变为 (i-x+1) ,此时依然合法,并且 (j-1) 这个位置变成了山峰(此时 (j-1) 变成了 (i-j+1) ),则 (f_{i,j}=f_{i-1,i-j+1})

综上,有 (f_{i,j}=f_{i,j-1}+f_{i-1,i-j+1})

最后的答案即为 (2 imes sum_{i=1}^nf_{n,i})


11.6

CF1442A Extreme Subtraction

题面

题解

如果这个序列是单调不增的,那么可以通过不断操作前缀使得整个序列变为 (0) 。考虑通过操作后缀使得整个序列变为单调不增。从后往前考虑,设当前枚举到了 (i) ,后缀 ([i+1,n]) 已经变为单调不增,若 (a_igeq a_{i+1}) ,那么无需操作;否则将后缀 ([i+1,n]) 整体减 (a_{i+1}-a_i),使得 (a_i=a_{i+1}) ,若 (a_n) 减到了 (0) 以下,那么无解。

CF920F SUM and REPLACE

题面

题解

约数个数是 (log) 级别的,也就是说对一个数操作 (log) 次就可以使得这个数再次操作时不再变化。用线段树维护区间内还能操作的数的个数,暴力修改即可,复杂度 (Theta(nlog^2 n))

P4823 [TJOI2013]拯救小矮人

题面

题解

较矮的人一定先出去,所以先按照每个人的高度从小到大排序。考虑在排好序的数组上DP,令 (mathrm{dp}(i)) 表示考虑到第 (i) 个人时,离开了 (j) 个人后人梯的最大高度,从左往右依次考虑每一个人,若能出去就出去,更新DP数组:(mathrm{dp}(i,j)=mathrm{dp}(i-1,j-1)-a_i)

P4306 [JSOI2010]连通数

题面

题解

Floyd求解传递闭包板子,用bitset优化一下即可。


11.7

P6801 [CEOI2020]花式围栏

题面

题解

用单调栈维护高度单调上升的矩形。每次加入一个新矩形时,若栈顶的矩形高度小于等于当前矩形,让当前矩形直接入栈;否则,降低栈顶矩形的高度,同时不能破坏栈内的单调性,统计降低的高度对答案的贡献。

P5689 [CSP-SJX2019]多叉堆

题面

题解

用并查集维护树的形态,同时对于每一个树根维护答案 (mathrm{F}) 和子树大小 (mathrm{siz})

若将 (y) 接在 (x) 下面,则以 (x) 为根的堆的答案 (mathrm{F}'(x)=mathrm{F}(x) imes mathrm{F}(y) imes {mathrm{siz}(x)+mathrm{siz}(y)-1 choose mathrm{siz}(y)})

P5687 [CSP-SJX2019]网格图

题面

题解

将边权相同的边一起考虑,从小到大加入边,判断最多能加入几条边即可。


11.8、11.9、11.10

因为CSP-S爆炸,自闭三天


11.11

P7043 「MCOI-03」村国

题面

题解

发现最后会在两个点之间反复横跳,判断最后停在那个点即可。另外只有一个点的情况需要特判。

CF1443B Saving the City

题面

题解

考虑一段1是和上一段1一起消掉,还是自己消掉,取最优值即可。


11.12

考试


11.13

P3937 Changing

题面

题解

手玩一下样例发现每个数的贡献是杨辉三角的第 (t+1) 层,预处理组合数即可。因为只需要知道奇偶性,所以只需要预处理组合数的奇偶即可。


11.14

买了gmoj的号,感觉有点小贵。

GMOJ100137 胖头鱼的排序

题面

题解

题解

GMOJ1021 【中山市选2008】矩阵

题面

题解

直接乘显然爆炸,但是由于是01矩阵,很容易就能想到用bitset压位。复杂度 (Theta(frac{n^3}{w}))


11.15

P1850 换教室

题面

题解

考虑DP,令 (mathrm{dp}(i,j,0/1)) 表示考虑到第 (i) 个时间段,已经申请了 (j) 次,第 (i) 次有没有申请。分类讨论一下第 (i) 和第 (i-1) 个时间段分别有没有申请即可。

GMOJ6806 achen

题面

题解

要多看部分分的提示。

先考虑 (A=1,B=n) 怎么做。令 (mathrm{f}(i)) 表示遍历 (1sim i) 的方案数,有转移式 (mathrm{f}(i)=mathrm{f}(i-1)+mathrm{f}(i-3))

考虑一般情况,如果 (A ot =1) ,那么从 (A) 出发一定要先遍历 (1sim A-1) ,否则后面就遍历不到了,发现有且只有一种方案从 (A) 出发遍历完 (1sim A-1) 后到达 (A+1) 。同理,到达 (B) 之前一定要先遍历 (B+1sim n) ,方案也只有一种。(A+1sim B-1) 的部分用部分分的做法即可。


11.16

GMOJ6866 minmax

题面

题解

考虑点分治。假设由某个分治中心 (x) 开始,计算出了两条路径 (x-u)(x-v) ,它们的边权最大值分别为 (mathrm{Max}_1,mathrm{Max}_2) ,最小值分别为 (mathrm{Min}_1,mathrm{Min}_2) ,分类讨论 (u-v) 何时能够成为答案:

  • (mathrm{Max_1}-mathrm{Min_1}<k,mathrm{Max_2}-mathrm{Min_2}<k) ,假设 (mathrm{Max_1}>mathrm{Max_2}) ,那么有 (mathrm{Max_1}-mathrm{Min_2}=k) ,移项得 (mathrm{Max_1}-k=mathrm{Min_2}) ,可以用桶记一下所有的 (mathrm{Min}) ,枚举 (mathrm{Max}) 在桶中查询。
  • (mathrm{Max_1}-mathrm{Min_1}=k,mathrm{Max_2}-mathrm{Min_2}leq k) ,可以得到 (mathrm{Max_2}leq mathrm{Max}_1leq mathrm{Min}_2+k) ,开一个值域线段树记录 (mathrm{Max}) ,查询时查询区间 ([mathrm{Max_2},mathrm{Min}_2+k]) 的区间和。

注意当 (mathrm{Max_1}-mathrm{Min_1}=k,mathrm{Max_2}-mathrm{Min_2}=k) 时会算重,需要处理一下。


11.17

上午纪中考试,下午和晚上调T3


11.18

CF1404B Tree Tag

题面

题解

发现只有两种情况 ( ext{Alice}) 会赢:

  • (mathrm{dis}(a,b)le da) ,即 ( ext{Alice}) 能一步跳到 ( ext{Bob})
  • (2 imes dageq min(len,db)) ,即 ( ext{Alice}) 能把 ( ext{Bob}) 逼到死角,因为 ( ext{Bob}) 跳跃的距离不能超过直径,所以要对直径 (len)(min)

GMOJ1022 【中山市选2008】小树

题面

题解

降智题

考虑两个点 (x,y) ,假设 (frac{w_x}{d_x}<frac{w_x+w_y}{d_x+d_y}) ,得:

[egin{aligned} frac{w_x}{d_x}&<frac{w_x+w_y}{d_x+d_y}\ w_xd_x+w_xd_y&<w_xd_x+w_yd_x\ w_xd_y&<w_yd_x\ end{aligned} ]

能够得到:

[frac{w_x}{d_x}<frac{w_y}{d_y} ]

再做一些变形,还能得到:

[egin{aligned} w_xd_y&<w_yd_x\ w_yd_y+w_xd_y&<w_yd_y+w_yd_x\ frac{w_x+w_y}{d_x+d_y}&<frac{w_y}{d_y} end{aligned} ]

显然有:

[frac{w_x}{d_x}<frac{w_x+w_y}{d_x+d_y}<frac{w_y}{d_y} ]

那么可以得出结论:选一个点一定比选两个点更优。

从根跑一遍dfs即可。

原文地址:https://www.cnblogs.com/syc233/p/13919456.html