zoukankan      html  css  js  c++  java
  • 记录「十一月做题记录」

    水题记录。


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

  • 相关阅读:
    eclipse中的Invalid text string (xxx).
    在jsp文件中出现Unknown tag (c:out)
    eclipse 界面复原
    ecilpse 纠错插件
    Multiple annotations found at this line:- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
    Port 8080 required by Tomcat v9.0 Server at localhost is already in use. The server may already be running in another process, or a system process may be using the port.
    调用第三方https接口
    调用第三方http接口
    创建带值枚举
    spring整合redis之Redis配置文件
  • 原文地址:https://www.cnblogs.com/syc233/p/13919456.html
Copyright © 2011-2022 走看看