• 记录「十一月做题记录」


    水题记录。


    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即可。

  • 相关阅读:
    js防止按钮被多次点击
    jQuery:localStorage用法
    jQuery Ajax 前端和后端数据交互的问题
    <img>总结: 动态创建等问题
    jQuery
    Echarts 饼图(series)标题文字太长的换行设置
    echarts 为x轴、y轴添加滚动条
    video.js的应用
    关于跨域问题的详解
    麻省理工18年春软件构造课程阅读04“代码评审”
  • 原文地址:https://www.cnblogs.com/syc233/p/13919456.html
Copyright © 2020-2023  润新知