Red Right Hand

Flamire Lv4
  • Safe:做出来,觉得简单的题
  • Euclid:做出来,但不觉得简单的题
  • Keter:没做出来/看题解做出来/过题但根本不知道为什么过了 的题
  • Apollyon:无法自行解决的题目

[TOC]

1. CF871E - Restore the Tree [Euclid]

题面

有一棵 $n$ 个点的树,有人从上面挑了 $k$ 个点,并告诉了你这 $k$ 个点中每个点到所有点的距离(相当于给你了一个 $k\times n$ 的距离矩阵),请你构造一棵符合条件的树,无法构成则输出 $-1$

$2\le n\le30000,1\le k\le\min(200,n)$

题解

考虑随便从这 $k$ 个点中挑出一个点作为根,那么我们能确定每个点的深度,由此,我们可以求出这 $k$ 个点到根的路径上有哪些点,我们称这些点组成了「已知树」

接下来,我们考虑所有不在「已知树」中的点 $x$,对于这 $k$ 个点中的每个点 $y$,我们知道 $dep_y,dep_x,dis(x,y)$,那么我们可以求出 $dep_{lca(x,y)}$,而我们又知道 $y$ 到根的路径,因此我们知道 $lca(x,y)$

一个点 $x$ 会产生 $k$ 个 lca,这 $k$ 个 lca 一定要在一条到根的链上,我们将这 $k$ 个 lca 中最深的称为 $x$ 的「切入点」

我们将所有不在「已知树」内的点按深度考虑,依次往「已知树」上挂,我们对「已知树」的每个点维护当前考虑的深度向上一层的该点的子孙 $link$,然后将新来的点它的「切入点」的 $link$ 下面,到下一个深度时更新对每个「已知树」中的点的 $link$(这个「已知树」不包含后来挂上去的点)

复杂度 $O(nk)$

2. CF839E - Mother of Dragons [Keter]

题面

有一个 $n$ 个点的无向图,你需要给每一个点赋一个实数点权 $a_i$ 使 $\sum a_i=k$,一条边 $(u,v)$ 的权值为 $a_ua_v$,求权值和的最大值

$1\le n\le40,1\le k\le1000$

题解

结论:最优方案是取出原图的最大团,并将 $k$ 的权值平均分给团中的点

证明先鸽着。

我们只要找出最大团即可解决这个问题,考虑折半解决,我们枚举其中一半的点的集合,然后统计另一边的点集最大能为多少,复杂度 $O(2^{\frac n2}n)$

3. CF838D - Airplane Arrangements [Keter]

题面

有 $n$ 个位置,$m$ 个人,第 $i$ 个人会从第 $a_i$ 个位置出发,向左或向右行走,找到第一个没有被标记的位置,然后标记这个位置并消失,如果一个人没有找到符合条件的位置,那么你就是失败的。

求有多少安排每个人出现位置以及行走方向的方法,使得你不是失败的,答案对 $10^9+7$ 取模

$1\le m\le n\le10^6$

题解

打表得 $ans=2(n-m+1)(2(n+1))^{m-1}$。

说明:

考虑我们在 $n$ 后面再添加一个位置 $n+1$,并将它看做一个环,$1$ 与 $n+1$ 相邻,那么人们会在这个环上逆时针/顺时针走,你是失败的当且仅当第 $n+1$ 个位置被标记

考虑由于这 $n+1$ 个位置的地位是均等的,因此在 $n+1$ 被标记的概率是 $\frac{m}{n+1}$,未被标记的概率是 $\frac{n+1-m}{n+1}$,答案为 $\frac{n+1-m}{n+1}(2(n+1))^m$,即原式。

4. CF814E - An unavoidable detour for home [Euclid]

题面

求有多少 $n$ 个点的无权无向图,满足:

  1. 第 $i$ 个点的度数为 $d_i$
  2. 第 $1$ 个点到任意一个点的最短路存在且唯一
  3. 第 $1$ 个点到第 $i$ 个点的最短路长度不小于第 $1$ 个点到第 $i-1$ 个点的最短路

$3\le n\le50,2\le d_i\le3$

题解

按最短路长度分层转移,考虑题目要求使得这个无向图第 $i$ 层的每一个点有且仅有一条边与第 $i-1$ 层的点相连

我们令 $dp(i,j)$ 表示前 $i$ 个点,最后一层有 $j$ 个点的方案数

那么 $dp(i,j)=\sum_{1\le k\le i-j}dp(i-j,k)\times ways$,其中 $ways$ 表示 $[i-j-k+1,i-j]$ 与 $[i-j+1,i]$ 为相邻层时 $[i-j-k+1,i-j]$ 内部与 $[i-j-k+1,i-j]$ 和 $[i-j+1,i]$ 之间的边的方案数

由于 $[i-j-k+1,i-j]$ 中的每一个点都要与上一层连边,因此它们在考虑范围内的度数为 $1$ 或 $2$,我们可以将 $[i-j+1,i]$ 内的点视作度数为 $1$ 的点,但我们需要保证这些点不直接相连,考虑容斥统计,我们枚举度数为 $2$ 的点成环的个数,经过一番组合计数得到:

其中 $cyc_c$ 表示 $c$ 个度数为 $2$ 的点形成若干个环的方案数,不难 dp 得出

总复杂度 $O(n^5)$

5. CF802C - Heidi and Library (hard) [Keter]

题面

你有一个容量为 $k$ 的书架,初始为空,你在任意时刻可以扔掉一本书或者花费 $c_i$ 的代价购进第 $i$ 本书

第 $i$ 天会有人来看第 $a_i$ 本书,此时你需要保证你的书架里有这一本书

问满足所有人所需要的的最小代价

$1\le n,k\le80$

题解

好像有人讲过,但我完全不会。。。

费用流。

很明显我们第 $i$ 天后只有可能扔掉第 $a_i$ 本书

我们将“第 $i$ 天买的书留到第 $j$ 天扔掉”视作第 $i$ 天的书留到第 $j-1$ 天卖掉(并贡献 $-c_{a_i}$ 的代价)然后在第 $j$ 天又买进来一本书,这样我们可以保证每天都买一本书

我们给每天买的这本书建两个点,入点 $x_i$ 出点 $y_i$(其中 $x_i$ 的意义为“买进的第 $a_i$ 本书”,$y_i$ 的意义为“最后第 $i$ 天买进的书去哪了”)那么我们需要连如下一些边($(u,v,w,c)$ 表示 $u\rightarrow v$ 流量为 $w$,费用为 $c$ 的边):

  1. $(S,x_i,1,c_{a_i})$,这条边一定会被流,表示当日买进了第 $a_i$ 本书
  2. $(y_i,T,1,0)$,这条边一定会被流,表示第 $i$ 天买进的书被扔掉/卖掉了
  3. $(x_i,y_i,1,0)$,表示第 $i$ 天买进的书当天就被扔掉了
  4. $(x_i,x_{i+1},k-1,0)$,表示第 $i$ 天书架里的书留到了第 $i+1$ 天,注意这里容量是 $k-1$,因为下一天还要买进来一本书
  5. $(x_{i-1},y_{lst_i},1,-c_{a_i})$,其中 $lst_i$ 表示 $i$ 以前最大的 $j$ 使得 $a_j=a_i$,这表示在第 $lst_i$ 天的书留到第 $i-1$ 天被卖掉了

复杂度 $O(费用流)$

6. CF773D - Perishable Roads [Keter]

题面

给定一个 $n$ 个点的带权无向完全图,现在有一个首都,你需要给每个点指定一个出边,使得从任意一个点出发沿着出边走均能到达首都,而且从每个点出发经过的边权最小值之和最小,请对每个点作为首都的情况求出最小值

$2\le n\le2000$

题解

结论 1:答案一定是一条链

证明:考虑如果路径上有 $a\rightarrow c,b\rightarrow c$,我们不妨假设 $w_{a\rightarrow c}\le w_{b\rightarrow c}$,那么我们将 $b\rightarrow c$ 改为 $b\rightarrow a$ 更优

我们将所有边的边权都减去最小边的边权,这样经过最小边的路径答案一定是 $0$,最后再将答案加上最小边的边权乘 $n-1$

设这条路径上的点为 $a_1,a_2,\cdots,a_n$,边的边权依次为 $w_1,w_2,\cdots,w_{n-1}$

结论 2:设第 $k$ 条边为路径上的第一个最小边的下标,那么对于所有 $1\le i\le k-3$,有 $w_i>w_{i+1}$

证明:如果 $w_i\le w_{i+1}$,我们连 $a_{i+2}\rightarrow a_k,a_{i+3}\rightarrow a_{i+4}\rightarrow\cdots\rightarrow a_k$,那么答案一定不会更劣

那么我们只需要考虑 $w_{k-2}$ 与 $w_{k-1}$ 的大小情况,如果 $w_{k-2}>w_{k-1}$,那么答案为 $dis_{a_1,a_k}$ 的最短路;如果 $w_{k-2}\le w_{k-1}$,那么答案为 $2w_{k-2}+dis_{a_1,a_{k-2}}$

考虑这样的话我们建源点,向每个点 $i$ 连长度为 $2\min e_{u,i}$ 的边,这样能涵盖这两种情况的答案,跑一边最短路即可

复杂度 $O(n^2)$

7. CF687E - TOF [Safe]

题面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
dfs(v)
{
set count[v] = count[v] + 1
if(count[v] < 1000)
{
foreach u in neighbors[v]
{
if(visited[u] is equal to false)
{
dfs(u)
}
break
}
}
set visited[v] = true
}

main()
{
input the digraph()
TOF()
foreach 1<=i<=n
{
set count[i] = 0 , visited[i] = false
}
foreach 1 <= v <= n
{
if(visited[v] is equal to false)
{
dfs(v)
}
}
... // And do something cool and magical but we can't tell you what!
}

给定输入的 $n$ 个点 $m$ 条边的有向图,TOF 函数内会用某种方式对每个 $i$ 重排 neighbors[i],求所有可能的重排方式中,之后 dfs 调用次数的最小值

$1\le n,m\le5000$

题解

搁这搁这呢。。。

题面翻译:给定一张有向图,你需要删掉其中的一些边,把它拆成若干个内向基环树,使得原来有出度的点现在仍有出度,要求环长之和最小

考虑缩点后显然答案为所有出度为 $0$ 的强联通分量内的最小环之和,可以用 bfs 求出,特判一下强联通分量为一个点的情况

复杂度 $O(n^2)$

8. CF639E - Bear and Paradox [Safe]

题面

有 $n$ 道题,第 $i$ 道题的初始分数是 $p_i$,███████ 做完第 $i$ 道题需要 $t_i$ 的时间,我们定义 $T=t_1+t_2+\cdots+t_n$

如果 ███████ 在第 $x$ 时刻做完第 $i$ 道题,那么 ███████ 会获得 $p_i(1-\frac{cx}T)$ 的分数。不难发现,███████ 一共有 $n!$ 种做这些题的顺序,这些顺序中能获得最大的分数的我们称为「优秀的」

现在你需要求最大的 $c\in[0,1]$,使得对于任意「优秀的」方案,不存在 $i,j$ 满足 $p_i>p_j$ 且 ███████ 在 $i$ 上获得的分数小于在 $j$ 上的分数

$1\le n\le150000$

题解

显然可以二分,考虑怎么判断

推一下可以发现「优秀的」顺序一定满足 $\frac{p_i}{t_i}$ 递降,每个 $\frac{p_i}{t_i}$ 相等的段可以随意调换顺序

我们按 $p_i$ 从小到大考虑,那么可知,我们只要考虑 $p_i$ 段中可能位置最靠前的以及 $p_{i+1}$ 段中可能位置最靠后的会不会破坏要求

复杂度 $O(n\log W)$

9. CF1286C2 - Madhouse (Hard version) [Euclid]

题面

有一个长度为 $n$ 的串,你不知道它是什么。

你每次可以询问一个区间 $[l,r]$,会存在一个人告诉你 $s[l:r]$ 的所有子串,但这个人有些精神疾病,于是她告诉你的所有串都是乱序的,并且每个串内部的字符也被随机重排了

你可以进行至多 $3$ 次询问,并且这个人返回给你的子串不能超过 $\lceil0.777(n+1)^2\rceil$ 个,否则你会被██████████████。

你需要猜出这个串是什么。

$1\le n\le100$

题解

这个 $0.777$ 是骗人的,根本用不了那么多。

考虑你询问一个区间 $[l,r]$,那么你就能得到 $\{s[l],s[r]\},\{s[l+1],s[r-1]\},\cdots$

那么如果我们询问了一个长度为奇数的区间,我们就可以确定中间的位置

因此,我们分两种情况考虑:

  1. $n$ 是奇数,我们询问 $[1,n],[1,\frac{n-1}2],[1,\frac{n+1}2]$
  2. $n$ 是偶数,我们询问 $[1,n-1],[\frac n2,n],[\frac n2,n-1]$

不难发现这样可以推出答案

注意特判 $n=1$ 的情况

10. CF1218A - Bubble Reactor [Safe]

题面

你有一张 $n$ 个点 $n$ 条边的无向图,你首先需要选定一个点将其标记,接下来你需要重复 $n-1$ 次“选择与一个已标记的点直接相连的未标记点并将其标记”,标记一个点会获得“与该点直接或通过若干未标记点相连的点的未标记点个数”的收益,求最大收益

$3\le n\le15000$

题解

流汗黄豆。

找到环后直接在环上区间 dp,复杂度 $O(n^2)$,能过。

11. CF1201E - Knightmare (easy/hard) [Euclid]

题面

交互题。

$n\times m(2|n,2|m)$ 的国际象棋棋盘上 $(x_1,y_1)$ 有一只白马,$(x_2,y_2)$ 有一只黑马,白马先走,游戏轮流进行,每次每人走一步,白马的目标点是 $(\frac n2,\frac m2)$,黑马的目标点是 $(\frac n2+1,\frac m2)$,如果一只马到了目标点并且另一只马一步之内杀不掉它,那么它就赢了,同时如果一个马被杀掉了,那么活着的那只马就赢了,如果经过 $350$ 步仍无法分出胜负那么平局

交互库邀请你和她一起玩这个游戏,由于交互库很有礼貌,所以她让你选择你要用哪只马,你想获胜。

$1\le n\le1000$

题解

我们称 $(x_1,y_1)$ 为 $W$,$(x_2,y_2)$ 为 $B$,$(\frac n2,\frac m2)$ 为 $tW$,$(\frac n2+1,\frac m2)$ 为 $tB$

首先不难发现肯定有一只马无法吃掉另一只马,我们的策略分如下几种情况(这里假设黑马吃不掉白马,反过来情况类似):

  1. $dis(W,tW)\le dis(B,tB)$,选白马,按最短路线往 $tW$ 走,原因显然
  2. $dis(W,tB)\le dis(B,tB)+1$,选白马,按最短路线往 $tB$ 走,这时黑马距离 $tB$ 一定为偶数,下一步黑马必定会跳到距离 $tB$ 为奇数的位置上,而距离 $tB$ 如果是 $1$ 则会被白马杀死,因此距离至少为 $3$,而 $tB$ 到 $tW$ 恰好为 $3$ 步,将白马移动过去即可
  3. 否则,选黑马,按最短路线往 $tB$ 走,白马不会追上你。

这样不会超过 $350$ 步,可以通过此题

12. CF1158D - Winding polygonal line [Euclid]

题面

有 $n$ 个点,你要连一条不自交的折线经过这里的所有点(且只能以这些点为起点/终点/拐点),这条折线上会有 $n-2$ 次转向,给出长为 $n-2$ 的字符串 $s$,由 LR 组成,表明第 $i$ 次转向是左转还是右转,要求构造一条符合要求的折线。

$1\le n\le2000$

题解

我们称构造出的答案为 $p_1,p_2,\cdots,p_n$

构造策略如下:

首先考虑前两个点,我们钦定 $p_1$ 为 $y$ 坐标最小的点,将,然后如果 $s_1=L$,我们钦定剩余点极角排序后半圆内,最靠逆时针方向的点为 $p_2$,否则我们钦定最靠顺时针方向的点为 $p_2$

然后对于 $s_i(1\le i\le n-2)$(我们现在已 $p_i,p_{i+1}$,求 $p_{i+2}$),分四种情况讨论:

  1. $s_i=L,s_i=s_{i+1}$,以 $p_{i+1}$ 为中心极角排序,取 $p_{i+2}$ 为 $\overrightarrow{p_ip_{i+1}}$ 这条射线的时针半平面中的最靠时针的点
  2. $s_i=L,s_i\neq s_{i+1}$,以 $p_{i+1}$ 为中心极角排序,取 $p_{i+2}$ 为 $\overrightarrow{p_ip_{i+1}}$ 这条射线的时针半平面中的最靠时针的点
  3. $s_i=R,s_i=s_{i+1}$,以 $p_{i+1}$ 为中心极角排序,取 $p_{i+2}$ 为 $\overrightarrow{p_ip_{i+1}}$ 这条射线的时针半平面中的最靠时针的点
  4. $s_i=R,s_i\neq s_{i+1}$,以 $p_{i+1}$ 为中心极角排序,取 $p_{i+2}$ 为 $\overrightarrow{p_ip_{i+1}}$ 这条射线的时针半平面中的最靠时针的点

昂,就这样,是不是看起来很对呢/cy 我也不知道为啥对

13. CF1140F - Extending Set of Points [Euclid]

题面

对于一个平面直角坐标系内的点集 $S$,我们定义运算 $f(S)$ 为:如果存在一个点 $(a,b)\notin S$ 且存在 $x,y$ 使 $(x,b)\in S,(x,y)\in S,(a,y)\in S$,那么我们将 $(a,b)$ 加入 $S$,如此往复,直到不能加点为止,此时的 $S$ 为运算的结果

现在有一个点集 $T$,初始为空,有 $q$ 次操作,每次加入或删除一个点,每次操作后求 $|f(S)|$

$1\le q,x_i,y_i\le3\times10^5$

题解

如果我们将每个 $x$ 坐标建点 $a_i$,将每个 $y$ 坐标建点 $b_i$,$(x_i,y_i)$ 视作在 $a_i$ 与 $b_i$ 之间连一条边,那么答案就等于每个连通块内 $a$ 点的个数乘上 $b$ 点的个数的乘积之和

我们对时间轴建线段树,将每条边存在的时间区间打到线段树的懒标记上,最后在离线在线段树上 dfs,用可撤销并查集维护答案,复杂度 $O(q\log^2q)$

14. CF1103C - Johnny Solving [Euclid]

题面

你有一张 $n$ 个点 $m$ 条边的联通无向图以及一个整数 $k$,保证这张图中每个点度数不小于 $3$,你可以选择以下两个任务中的任意一个完成:

  • PATH:找到一条点数 $\ge\frac nk$ 的路径
  • CYCLES:找到 $k$ 个长度 $\ge3$ 且不为 $3$ 的倍数的环,且这些环满足每个环都有一个独特的点不在其他环内出现

$1\le k\le n\le2.5\times10^5,1\le m\le5\times10^5$

题解

我们找出原图的一棵 dfs 树,如果这棵树深度超过 $\frac nk$,那么我们就能够完成 PATH 任务

否则,这棵树至少有 $k$ 个叶子,而每个叶子至少有两条回边 $v_1,v_2$,那么 $u\rightarrow v_1\rightarrow u$,$u\rightarrow v_2\rightarrow u$,$u\rightarrow v_1\rightarrow v_2\rightarrow v$ 中至少有一个环长不是 $3$ 的倍数,那我们就能完成 CYCLES 任务

15. CF1067E - Random Forest Rank [Keter]

题面

有一棵 $n$ 个点的树,每条边有 $\frac12$ 的概率被删除,求邻接矩阵的秩的期望

$1\le n\le5\times10^5$

题解

乍一看是道 dp 题,没想到是个线代题。

考虑矩阵的秩等于非零子式的最高阶数,出于某些原因,我们只用考虑关于左上-右下对角线对称的子式(editorial 也没给证明我能怎么办)

考虑这样的子式一定对应着原图的一个导出子图,那么这样的子式也是一个森林

考虑一个矩阵的行列式为 $\sum_{\pi}(-1)^{sgn(\pi)}\prod_{i=1}^n A_{i,\pi_i}$,对于一个排列 $\pi$,它的贡献非零当且仅当 $A_{i,\pi_i}$ 均为 $1$,这意味着 $i\rightarrow \pi_i$ 这些边在这个子图中均存在,会形成若干个环,但是森林里没有环,因此只能全是一条边的两个端点形成的环,而这就是原图的一个完美匹配,只有完美匹配的排列才会对行列式做出贡献,所以行列式非零的子图一定有完美匹配。

又因森林的完美匹配唯一,所以如果有完美匹配一定恰好有一个排列对行列式做出贡献,所以如果有完美匹配那么一定行列式非零

因此我们要找到最大的行列式非零的子式,相当于找到最大的有完美匹配的子图,相当于找到原图的最大匹配

因此秩的大小等于最大匹配边数的$\times2$

那么我们需要求出最大匹配数的期望,我们令 $f_u$ 表示只考虑 $u$ 子树内的边,$u$ 与儿子匹配的概率

我们以“能往下匹配就往下匹配”的方式来最大匹配,那么 $u$ 不与儿子匹配的情况当且仅当儿子都已经匹配或边断掉,由此我们可以得到转移式 $f_u=1-\prod (\frac12f_v+\frac12)$

复杂度 $O(n)$

16. CF1060F - Shrinking Tree [Keter]

题面

给定一棵 $n$ 个点的树,$n-1$ 次操作,每次操作随机选一条边 $(u,v)$,将 $u,v$ 所连的所有其他点连到一个新点上,并将 $u,v$ 删除,这个新点的编号在 $u,v$ 中随机选

对于每个 $i$,求 $i$ 这个编号留到最后的概率

$1\le n\le50$

题解

我们对每个点分别求解,求解点 $i$ 时我们将其设为根

设 $siz_u$ 为 $u$ 子树内的边数,定义 $f_{u,i}$ 表示 $u$ 的子树内,钦定前 $siz_u-j$ 次操作均没有删掉 $u$ 这个编号,在这种情况下 $u$ 留到最后的概率

考虑怎么合并子树 $v$,设我们合并完的状态为 $g_i$

首先我们需要加入 $u\rightarrow v$ 的边,我们考虑枚举这条边倒数第几步被删,设其为 $j$,那么:

  1. $j\le i$,说明 $j$ 这一步没有钦定,那么 $g_{i}\leftarrow \frac12f_{v,j-1}\times\frac1{siz_v+1}$
  2. $j>i$,说明 $j$ 这一步被钦定,那么 $g_i\leftarrow f_{v,j-1}\times\frac1{siz_v+1}$

接下来考虑如何合并这棵树与 $u$ 已经计算的子树,设我们合并完的状态为 $h_i$,那么我们枚举最后 $a+b$ 次操作内有 $a$ 个在已经计算的子树内,有 $b$ 个在新子树内,那么转移式为:$h_{a+b}\leftarrow f_{u,a}g_b\frac{\binom{a+b}a\binom{siz_u-a+siz_v-b}{siz_u-a}}{\binom{siz_u+siz_v}{siz_u}}$

复杂度 $O(n^4)$

17. CF1033F - Boolean Computer [Safe]

题面

有 $n$ 个 $w$ 位的二进制数 $a_1,a_2,\cdots,a_n$,有 $m$ 次询问,每次给出一个位运算函数 $f$,用一个长为 $w$ 的由 AOXaox 组成的字符串表示,分别表示两个数从高到低的第 $i$ 位进行 ANDORXORNANDNORNXOR 操作,求有多少有序对 $(i,j)$ 满足 $f(a_i,a_j)=0$

$1\le w\le12,1\le n\le3\times10^4,1\le m\le5\times10^4$

题解

考虑枚举其中的一个操作数,另一个操作数的每一位就只有 0,1,任意 三种情况,那么我们可以用 $O(w3^w)$ 的复杂度预处理出这部分的答案,这样的总复杂度是 $O(w3^w+mw2^w)$,无法通过

考虑我们枚举操作时从 $0$ 到 $2^w-1$,二进制位改变的次数是 $O(2^w)$ 量级的,所以我们计算 $i$ 时可以继承 $i-1$ 的信息,然后修改与 $i$ 不同的位,这样我们把复杂度降到了 $O(w3^w+m2^w)$

18. CF1012D - AB-strings [Fuck you] [Decommissioned]

题面

给定两个由 ab 组成的串 $s$ 与 $t$,每次操作可以分别交换两个串的一个前缀(不一定长度一样,可以为空,可以为全串),问最少要多少次操作才能使其中一个串全是 a,另一个串全是 b,并给出构造

$1\le|s|,|t|\le2\times10^5$

题解

I tried.

特判题给爷爬。

19. CF962G - Visible Black Areas [Safe]

题面

给定一个简单 $n$ 边形,保证所有边都平行于坐标轴,给定一个矩形,求只保留 $n$ 边形在矩形内的部分(不含边界),会有多少连通块

$1\le n\le15000$

题解

不懂为啥这题还 *2800

直接无脑扫描线,用 set 维护当前的连续段

复杂度 $O(n\log n)$

20. CF938F - Erasing Substrings [Keter]

题面

给定一个长为 $n$ 的串,令 $k=\lfloor\log_2n\rfloor$,你要进行 $k$ 次操作,第 $i$ 次删除一个长为 $2^{i-1}$ 的子串,求最后剩下的串字典序最小的可能

$1\le n\le5000$

题解

不难,但是我没做出来。降智了/cy

令 $dp_{i,S}$ 表示前 $i$ 位,使用了 $S$ 集合中的操作,是否可能成为最小值,每次转移时我们先对每个为真的 $dp_{i,S}$ 将 $dp_{i+1,S}$ 赋为真,然后 $j={0\rightarrow 2^n-1}$,如果 $dp_{i+1,j}$ 为真那么将 $dp_{i+1,j\cup\{x\}}(x\notin j)$ 赋为真,最后再检查有哪些是最小值

复杂度 $O(n^2\log n)$

  • Title: Red Right Hand
  • Author: Flamire
  • Created at : 2022-01-15 00:00:00
  • Updated at : 2022-02-23 16:18:46
  • Link: https://flamire.github.io/2022/01/15/CF-2/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments