2024.1 训练纪要
nfls 线上训练。
其实没想好这篇博要怎么写。大概就还是写个 solution set 之类的吧。
这个要加入做题纪要合集吗??
2024.1.1
100 / 10 / 15, sum 125, rank 10/35
怎么我这次来打的第一场又是没啥人打导致排名靠前,历史总是惊人的相似。
但是打的还是彩笔,T2 读错题想了半天,开始写暴力了才意识到读错题了 /cf
T3 似乎不太可改
R17 T2 Beautiful World (SDWC2021 Day3T3 美丽的世界)
考虑建图,然后显然一个连通块内要选边数个点,那么只有树与基环树是合法的,那么我们直接考虑两种情况。基环树显然是只有 2 种选择,树可以从每个点开始,有
我们考虑将这样的二元组画到平面上。注意到权值相等的点在一条反比例函数的曲线上,这个图像是凸的,也就是说任意两点之间的边上的点的权值一定是比两个端点大的,那么也就是说将这些点求出一个凸包来,实际上只有左下凸包上的点可能成为最小值。那么我们实际上只需要最后将所有的点合并成一个点集后,这个点集的凸包上的点即可。而注意到合并过程就是两个点集的闵可夫斯基和,于是我们只需要对集合的凸包做闵可夫斯基和即可。分治一下或启发式合并容易做到
2024.1.2
100 / 68 / 25, sum 193, rk 21/56
果然马上就 20+ 了,哈哈!
不过似乎是很可打的一场,但是太久不写 ds 了代码能力确实下降,T1 调了半天 2h 才过,T2 好像挺典的,不过又没想到直径,我是 shaber。卡在了一个很尴尬的位置,如果 T2 或 T3 多打一档分就能进前十了,好像也没啥意义
草原来 T3 部分分这么简单,亏了。
R18 T1 掉落 (CF780G Andryusha and Nervous Barriers)
昨天 soy D 我为什么不写 T1,那我写下 T1。
发现多个球落到一个平台之后就没有任何区别了,所以我们只需要维护出每个平台上掉下来多少球,进而我们只需要知道从每个位置开始往下落能落到哪个平台上,一共有
R18 T2 原神 (湖南集训 树上的棋局)
简要题意:给你一棵有根树,每个点上有一个棋子,每次可以将一个棋子移动到子树内除了当前节点外的任意一个节点,
题解:本来想把树剖卡掉只放全局平衡二叉树过的。要真这么干就鉴定为纯纯玩原神玩的。哦搬题人名字就是原神启动。
但是好像做法很典了,典到我甚至感觉我考过这个,没准我还真考过这个,也不好说。
首先容易根据 SG 一套理论把每个棋子分开,其中一个棋子的 SG 值是子树的最大深度,那么问题就是支持子树异或树链异或换根操作。
首先可以处理出距离每个点最远的距离和次远的距离,那么以任意一个点为根的时候只有可能是这两个值,而如果根在最远点所在子树内则 SG 是次远值,否则是最远值。而最远距离一定是树的直径的两个端点之一,那么我们将直径从中间分开,左边的点的最远点都是右端点,右边点的最远点都是左端点,对于某一个点为根时,所有的取到最远点的点就是根到直径中点上的所有点。
那么操作就简单了,换根操作就是将一条路径的最大与次大值翻转,修改是对存在与不存在翻转,那么我们线段树维护一个
R18 T3 区间mex快速算法 (2021 集训队互测 Round 10 T3 染色)
考虑维护没有出现的数的集合,这样区间 mex 就是集合中的最小值。
假如 mex 固定,那么第三个操作可以使用线段树来维护,首先找出区间内的最小值,然后再将所有最小值的位置加
带修那么我们考虑大力在线段树上维护一下这个集合。首先我们将操作 12 变得更简单一些,我们对每个值维护一棵珂朵莉树,这样我们就只有区间覆盖与删除一个覆盖的区间的操作了,不需要判断原来是否存在。然后我们就可以上线段树了,每个线段树节点上维护一个可删堆,区间覆盖时则将区间内访问到的线段树的节点内插入这个值,那么一个点的集合就是这个点的叶子到根上的所有可删堆的并。删除时我们可以保证删除的区间与加入时的区间一模一样,这样只需要将插入时访问到的元素再删一遍即可,这只需要在珂朵莉树将一个区间分裂开时先把原区间删去,然后将两个新区间加入即可。我们在线段树上维护出最小值与最小值出现次数,再维护出最小值处加的标记,注意到我们这个过程中是不能将可删堆的内容下传的,所以当我们访问到需要修改的最小值所在的区间时,我们需要将最小值操作变成区间加操作,因为这下面的所有点的 mex 一定都是最小值。
2024.1.3
计数与数学专题。
L1.3 T1 Kevin and Grid (CF1392I)
以下你将看到震撼人心的符号语言。
首先网格图是平面图,我们有平面图欧拉定理:连通块数等于
我们先不考虑连通块是否在边上,我们先求出连通块数量。记
现在问题是怎么求出
L1.3 T2 prefix sum
首先我们有暴力重构算法,直接每
二维前缀和有经典的用两个 BIT 维护
L1.3 T3 飞翔的胖鸟
简要题意:求
直接求导,极值点满足
L1.3 T4 Beautiful Matrix (CF1085G)
这题写起来是真的难受,细节非常诡异。
考虑枚举第一行不相同的是哪行。如果是第一行,发现只需要找到第一行的排列的排名即可,直接康托展开,下面每一行都是一个错排。
如果不是第一行,下面的行仍然是错排,重点在于这一行必须与上一行形成错排,所以相当于要求一个错排的排名。
仍然枚举第
考虑
2024.1.4
计数与数学专题 Day2。
下午和晚上将 jjdw 的诡异题代码整了出来,并迭代了三版,现在初版做法已经被爆踩了。做法极其抽象,但是题面居然显得很正常,非常神秘。希望不会再被评个 4.5 分。
L1.3 T5 分层图
简要题意:给定
考虑类似于插头 DP 的做法,我们从某一块划分开,则上面分成了若干条链,每一条链的长度至少为
那么我们设计 DP,只用记录当前有多少段。假设上一层有
然后矩阵快速幂一下。注意到段数是
L1.3 T6 复读机 加强版
首先单位根反演可以得到答案等于
那么也就是说,最后的
而计算答案相当于计算
L1.3 T7 愚蠢的在线法官 (2021 集训队互测 Round 1 T1)
我没看懂阿,把代码贺了。
官方题解和课件的做法都没看懂,我比较废物。
首先如果
然后发现同时交换一行与一列行列式答案不变,所以可以把
考虑每次从 lca 处合并两部分,假设第一部分的矩阵是
两部分自己的矩阵还是自己的矩阵,两部分之间的贡献全部都是当前的 lca 的权值
然后考虑维护这个矩阵的行列式。考虑到全局矩阵减一个
注意到后面的式子如果
我们记
实际上
那么考察怎么合并信息:
于是就可以维护了。
2024.1.5
40 / 100 / 45, sum 185, rk 39/58
他妈 T1 被卡常卡成 40 分有点蚌埠住。custom test 比实际测评跑的快,因为实际测评一堆点并行跑,然后把我 cache 全挤掉了。呃呃。循环两维调换下位置快了一倍。T3 卡卡空间就过了。
T1 没啥意思,T2 挺简单的数位 DP,进位是一个前缀应该挺常见的了,稍微写下 T3。
R19 T3 树与
考虑一个 01-Trie 上的按位贪心,先看这一位全选
但是问题是 01-Trie 的空间复杂度是
正经做法是,注意到上述做法访问到的点实际上只有前
把计数与数学 H 补了。
L1.3 T8 抽奖机
首先题目描述的就是个三进制异或 FWT,二进制异或 FWT 实际上是在对每一维做 DFT / IDFT,那么三进制同样做 DFT / IDFT 即可,三次单位根模
注意到出现
考虑对这个东西做 FWT,相当于将
这个东西是容易
2024.1.6
100 / 30 / 20, sum 150, rk 20/38
这个真蚌埠住了,NOI 前的 nfls 模拟赛教我了 bitset
,教我了按 bitset
算空间需要先除以 bitset
根本开不下,于是写了线段树。结果线段树数组还开小了,因为我以为开 100 个 bitset
就 MLE 了。乐死了。
天天垫!
R20 T2 原神账号
卸载!
肯定是个 bitset
,然后套路分块,但是不能差分,很恼,但是或可以重复贡献,ST 表即可。bitset
空间要除以 8,所以 8 MB 是可以开下的。我是傻逼。
R20 T3 肖芬途
我今天没喝冰红茶。
其实做法真的不复杂,我咋就不会呢。
容易发现这个限制实际上是给了一个 BFS 序,且注意到,
强制在线比较恶心,这里有一个小技巧:我们把上述做法改成根号重构,每
我不理解为啥原题要卡树剖的 k 级祖先啊,而且大部分情况树剖跑的是比长剖快的,怎么感觉集训队互测都喜欢整一些无意义加强,净把一些好题给整成恶心人的题。
唉,晚上打 CF,水个题吧。
ABC335G Discrete Logarithm Problems
根据经典离散对数理论,直接离散对数,相当于求
直接求
然后问题就是有多少
2024.1.7
咋都会 F2 啊。
早上想了两个小时没有任何想法,然后看题解一个 hint 马上秒了,这个太深刻了。有种 noi d2t2 的美。但是这种很显然的转化根本想不到到底是怎么回事呢。
决定把标题里面的 nfls 删了,因为这博还是有点 nfls 以外的训练内容的。
CF1919F2 Wine Factory
考虑建个最大流的图,
考虑最大流等于最小割,我们要找出这张图的一个最小割,容易发现相邻两个点
Gym103371I Organizing Colored Sheets
沈老师题单题。
我们只需要考虑每个没被染色的格子可以由哪些大小的矩形覆盖,然后对所有的格子的矩形集合求交即可。
容易发现,我们只需要考虑与某个已经被染色的格子相邻的格子即可,因为假如某个大小的矩形能将所有与某个已染色格子相邻的格子全部染色,那么找到任意一个最大的包含一个格子的矩形,其一定与某个已染色格子相邻,将其进行一些平移即可将当前格子染色。
那么只需要考虑挨着某个染色格子的答案即可。假设是上边界挨着染色格子,我们可以直接枚举这个矩形的高度,然后找出以这个高度的最大矩形即可,这个是容易求的。注意到每一个未被染色的格子只会由上述过程枚举一次,所以复杂度是
QOJ1884 Mission Impossible: Grand Theft Auto
感觉沈老师课件的做法和过的几份代码基本没有什么道理,主要在于
操作相当于有一棵树,初始全是黑色,每次将一条链染白,然后将所有黑点周围的白点染黑,使用
注意到这里不是
简单手模一下发现,重点在于删除的叶子 DFS 序需要是连续的,因为如果一棵子树内的一个叶子被删,而还剩下一个叶子,那么如果下一回合不选这个子树内的叶子,那么下一回合被删除的叶子就可能恢复。那么我们考虑一种构造:按照 DFS 序列下每一个叶子,从某个点
但是这样构造的问题是,如果某个
我们大胆猜测,存在一个点这样做不会出现上述情况。我们需要更细致一些的考虑:首先,二度点是没有用的,我们可以将所有二度点全部缩起来,此时这棵树上最多还剩下
还不够,注意到由于我们最后一次操作可以直接将一个叶子到根覆盖掉,那么也就是说如果子树内只有一个叶子,那么此时进行上述的限制是没有意义的。我们只考虑不连向叶子的边,此时仅剩
2024.1.8
40 / 100 / 41, sum 181, rk 9/40
呃呃。
T3 好像有高级做法,不过好像所有人都是 KTT 或者分块凸包过的。额。
我不会 KTT 啊。我是不是应该抄一个。
唉抄个鬼,不如颓 project euler。
R21 T1 盗梦空间
简要题意:给你一棵树,每次询问
考虑建虚树,然后答案分三种情况:
- 在虚树点上:可以通过在虚树上 DP 得到;
- 在空子树内:直接预处理;
- 在虚树边上:考虑可以处理出每个点的兄弟子树内的最大距离,那么就可以倍增处理出一条链上的除链以外的子树内的最大深度,然后每个边上找到分界点即可。
唉,我的好做法:
考虑求出每个关键点管辖的连通块,其中这个连通块内的所有点的最短距离都是这个关键点,那么只需要求出每个关键点到其管辖的连通块内的最长距离即可。
连通块只需要找到虚树上每个点到关键点的最近距离,然后按照这个距离划分即可,虚树上两端管辖点不同的边中间的分界点容易找到。
然后考虑拿珂朵莉树来维护连通块的标号区间。注意到一个连通块的标号区间就是这个连通块最浅的点的子树区间删掉子树内其它连通块的区间,于是可以珂朵莉树维护。
找一个点到区间内的最远距离可以直接线段树维护直径。我使用点分树
R21 T2 偷藏女装 (ARC068F Solitaire)
但是我之前确实没看这个式子咋证明的。
洛谷题解看到一个比较简单的证明,写一下:
考虑合法序列的限制:前
现在问题是,求有多少长度为
设
- 若
,那么此时这个点一定不可能出现在长度 的链中,所以可以直接删去,此时 可以是任意值,即 ; - 否则,考虑
的值:- 若
,同样这个点不能出现在长度 的链中,可以删去,于是 ; - 若
,此时一定出现 的链,不合法; - 若
,那么注意到如果 存在于某条链中,那么可以把这个链的 改成 ,最长链不变,所以可以把第一个数删去,于是 。
- 若
综上,我们有:
改变一下形式就是:
发现
这个模数直接 exLucas 即可。
R21 T3 楼梯调度
首先有一个弱智的
仔细写一下 DP 式子,发现我们可以将这个 DP 看作下面的操作:
- 若
:- 全局加
;
- 全局加
- 若
:- 求得
内的最小值 ; - 对于
,令 ; - 对于
,令 ; - 令
。
- 求得
这不是我们区间加下标区间求最小值吗,直接上 KTT 就完了。复杂度
可是我不会 KTT 啊。其实 KTT 就是存一个一次函数
2024.1.9
100 / 100 / 40, sum 240, rk 1/52
草。
T1 广义串并联图,T2 部分分式分解,T3 看着就不像是有啥人会做的样子,然后最后两个小时狂暴 T3 打表,有点乐。然后闲的没事就去 project euler 了。
唉我发现 project euler 真是好颓资,
R22 T1 染色问题
简要题意:求图的
这个限制考虑无脑上广义串并联图方法。删一度点是容易的,缩二度点之后注意到这条边的两段的颜色有可能相同,于是我们设计权值
然后套做法:
- 删一度点:
; - 缩二度点:
; - 叠合重边:
。
最后缩完之后剩下的图
R22 T2 IOer
简要题意:求
直接分治乘法加线性递推肯定是常数极大不太好跑的,考虑找一些深刻的做法。
容易联想到我们求斐波那契数列的单点时,有一个通项公式可以通过部分分式分解求得答案,那么我们考虑类似的做法。考察假设最后有
我们把相同的式子套过来,即可得到
其实
R22 T3 力脑
简要题意:给定一个 01 串,有些位置是 ?,将 ? 随机替换成 0 或 1,求对这个字符串建后缀自动机的节点数期望。
考虑 SAM 节点数等于反串后缀树的节点数,所以我们先反转一波求后缀树的节点树。由于字符集为 2,所以这是一棵二叉树,我们记儿子数为
- A 类点一定是这个串的某个后缀,且在整个串中仅出现一次;
- B 类点一定也是一个后缀(否则会被压缩起来),且将这个后缀后面加一个 0 或 1 后,只有其中一种字符串存在。
C 类点没什么性质,考虑去掉它,由于
首先先考虑 A 类点怎么计算:我们考虑枚举这个后缀是什么,然后求出这个后缀仅出现一次的概率
考虑怎么计算
考虑怎么求这个式子,我们有两种方法:
- 枚举
:我们可以暴力枚举集合 ,这样我们可以确定一些字符相等的关系,我们把字符相等的缩起来,这样我们能够得到若干个连通块,我们只需要考虑每个连通块内字符相同的概率即可,复杂度 ; - 枚举
:上一种做法是枚举 ,计算有多少后缀满足条件,我们可以改成直接枚举后缀是什么,然后看它是多少后缀的前缀,然后把容斥系数计算出来。这可以进行 DP,设 表示考虑了 ,且最后一个集合内选择的后缀是 ,容斥系数之和。考虑从 转移到 的系数:- 首先
需要能和 匹配,否则肯定不能转移; - 若
,那么这两次匹配没有交,那么 之间的 ? 可以随便填,乘一个方案数; - 否则,两者会存在一个
的交,说明这个长度必须是 的一个 border,可以先对这个串跑 KMP 求出所有 border,然后就能快速判定了。
这样的复杂度是 。
- 首先
容易发现我们只需要平衡一下两种算法,即可得到
考虑
2024.1.10
字符串专题。
但是讲课视频开头还有些似乎是上个专题没讲完的东西,那就:
L1.3 T? 好像是个 FWT 题
给定一个集合幂级数
首先考虑
我们考虑对于每一个 bitset
维护,设
考虑我们实际上在求什么,再设一个
T? Strange Function
计算几何狗都不做。
好的回到字符串。
L1.10 T1 (P5829【模板】失配树)
有人说,这是一道模板题,所以我们使用 border series 解决这个问题。
唉就还是那套理论,然后当树剖写就行了。求一个 border 的最短的公差相等的 border,然后一直跳 top 就好了。
auto top = [&](int x) { return x <= 1 ? x : x % (x - nxt[x]) + (x - nxt[x]); };
while (m--) {
int p, q; scanf("%d%d", &p, &q);
p = nxt[p], q = nxt[q];
while (top(p) != top(q)) {
if (top(p) > top(q)) p = nxt[top(p)];
else q = nxt[top(q)];
}
printf("%d\n", min(p, q));
}
长得挺好看。
L1.10 T2 (P4156 [WC2016] 论战捆竹竿)
考虑把所有 border 找出来,那么每次就是可以将字符串后面加一个
显然是个同余最短路问题,但是
这个首项
然后现在问题就是
复杂度
L1.10 T3 (P4548 [CTSC2006] 歌唱王国)
L1.10 T4 (HDU6791 Tokitsukaze, CSL and Palindrome Game)
额,结论和上题一样,所以比较的实际是两个 border 序列的字典序。
然后这个东西直接建 PAM 即可,哈希找下 LCP,倍增即可。
2024.1.11
string day2.
不知道为啥感觉巨累,不想写代码,摆了。
看 accoders 模拟赛题,感觉啥都不会,有点自闭。
upd. accoders
L1.10 T5 (ROI 2016 DAY2 二指禅)
考虑 DP。由于每次可以加入一个前缀或一个后缀,我们正反建出两棵 Trie 树,然后考虑在上面转移。
加入一个前缀时,我们考虑从
加入后缀也是类似的,我们考虑枚举
上述一个转移需要
L1.10 T6 (CF1483F Exam)
为啥总不会这个。
子串一定是前缀的后缀,可以直接枚举每个串的每个前缀,考虑其匹配的最长的一个后缀。显然更短的一定被包含在最长的后缀里面,我们只需要把这
2024.1.12
100 / 100 / 70, sum 270, rk 2/58
咋 T3 还能是我做过的原。「解题报告」[AGC022F] Checkers
这题我正经做也就能打 20 分走人了,所以真实排名应该是 rk8。咋还这么靠前。好像 T1, T2 写挂的巨大多。
R23 T1 星际逃亡
简要题意:三维坐标系上有
首先肯定二分答案,发现两个点能相互到达的时间是一个区间,容易解方程得出。考虑到如果一个点能与另一个点相互到达,那么可以不断反复传送实现一直刷新时间,那么
R23 T2 博弈问题
简要题意:两个人树上博弈,先手选一个
考虑 dsu on tree 一波,这样我们只用考虑每次集合内加入一个数如何维护答案。
考虑按位贪心,如果某一位上一个节点内仅有一个数,那么对方选择的时候就必须需要选另一个子树内的数,于是发现先手一定会选择某个只有一个数的子树。如果所有子树都不止一个数,说明每个数都至少出现了两次,答案肯定是
那么考虑对于每一个子树大小为
2024.1.13
100 / 100 / 60, sum 260, rk 7/50
T1 T2 很无聊,而且下午放假,所以咕了。
2024.1.15
100 / 80 / 10, sum 190, rk 40/75
T1 结论很显然,T2 插头 DP 板子,T3 SoyTony 说讲课讲过,不过我没听,还是比较有趣的。不过挂分挂的太好了。
R25 T3 Dark Blue (GYM102803E)
首先考虑 height 全部确定怎么做,显然相当于有若干位置相等,还有若干不等关系,我们可以考虑并查集把相同的位置缩起来,然后不等关系建 DAG,然后拓扑 DP 一下即可得到最小方案。直接考虑的话,相等关系是若干个子串相等,可以并查集倍增做,不过本题有更优美的性质,由于 height 数组已经给出来了,可以考虑 SA 上由 height = 0 的部分划分成了若干段,其中每一段的开头字母显然是相同的,不同段之间字母显然不同,这样就很容易得到相等关系了,然后直接从前往后依次填 abcd 就是答案了。
考虑 height 有不确定的怎么办,那么我们同样可以将相等关系看作 SA 上的若干段开头相等,只不过这时候没有所有段互不相同的限制了。考虑不等关系,对于 height 相等的串不等关系很显然,height 不确定的话,我们考虑如何刻画两个子串的大小关系。虽然只给出两个子串的大小关系很难确定两个子串分别是什么,但是注意到我们有所有后缀之间的大小关系,也就是说如果两个后缀的大小关系只取决于两个后缀的首字母,如果首字母相等,则其大小关系取决于删去两个首字母后的两个后缀的大小关系,否则直接取决于首字母关系。那么我们就很容易得到不等关系了,只需要看看 rk[sa[i - 1] + 1]
与 rk[sa[i] + 1]
的关系,即可确定
2024.1.16
额这场直接挂机了,T1 T2 都做过,T3 看着像原神题,就一个挺麻烦的树剖然后就做完了呃呃。而且大样例内答案不为
不如做题单了,字符串专题还两题呢明天要开新专题了
L1.10 T8 (CF1276F Asterisk Substrings)
首先把本质不同的串分成几类,s
s*
*s
s*t
,还有一个空串一个 *
。
前面几种都很好统计,分别是 s*t
怎么计数。
考虑对于每一个串 s
统计串 t
的合法数量。我们找出串 s
的 endpos 集合,那么串 t
一定是 endpos 集合中某个位置
有篇题解说可以不用 SA 而是对反串求 SAM 然后线段树合并,其实这两者是完全等价的,因为 SA 的 height 就是后缀树上相邻两个儿子的 lca 深度,求若干个链并与 SA 相邻两两减去 lcp 长度是一模一样的。
2024.1.17
csy 计数专题:四个正常题,三个析合树计数,两个 q-analog,一个 ei 题。
额。
L1.17 T1 (Gym102538H Horrible Cycles)
感觉这题之前做过,但是不知道啥时候。
肯定先给
L1.17 T2 (AT_hitachi2020_f Preserve Diameter)
好好好
首先最后的图里直径只有一条,因为如果有两条可以加一条边把一条直径杀了但是图直径长度不变。
考虑现在找出这样一条直径,从直径一段开始 bfs,找到每个点到这个端点的最短距离。由于题目中要求加任意一条边都会使得直径改变,所以我们必须将不改变直径的边全部加上。我们按照距离相同的点分层,注意到在同层与邻层之间连边是不会改变任何点的最短距离,也就不会改变直径长度,于是这样的边一定全部会连上,且此时不可能出现跨两层之间的连边,因为这样会改变最短路径。那么,如果我们确定了每个点到这个端点的最远距离,则这个图的形态就确定了,于是我们只需要计数合法的距离数组即可。
对距离数组的限制有两个,一个是距离为
我们考虑以直径中点为根进行 DP,因为这个中点一定被所有直径经过。设
由于直径从哪头开始并不重要,所以答案需要除以
2024.1.18
又看了 accoders 模拟赛,又啥都不会,又自闭了
L1.17 T4 (CF1450H2 Multithreading (Hard Version))
这题挺有趣的。
upd. fzj 说这题没趣
首先考虑固定局面如何计算答案。容易发现如果一段连续段长为偶数,那么我们可以内部任意匹配,一定可以将这一段消掉且不造成任何贡献。那么我们考虑每次删除相邻的两个同色点,这样一直删直到剩下的点为黑白交替,答案就是白点的数量除以
考虑带问号,我们可以先将所有奇数位置上的问号染白,把偶数位置上的问号染黑,这样我们得到一个初始的
考虑如何修改。注意到修改之后
P3236 [HNOI2014] 画框
这个做法好厉害。
首先根据这篇博的第一个题的结论,我们只需要直到最后所有可能的
2024.1.19
100 / 100 / 65 / 10, sum 275, rk 21/82
THUWC 前的 IOI 赛制场,前三题是 GDKOI Day2,第四题是 Day1 T3。
T3 有点蚌埠住,之前做过一道和这题正解 90% 重合的题,然后我不知道可以代入单位根然后求和,呃呃了。
T2 找规律做的,可以大概猜到倍增然后往上面凑的,所以就懒得写了,T3 和上面那题不一样的一点就是答案求的是
T4 看不懂,摆了。
2024.1.20
100 / 100 / 32 / 60, sum 292, rk 30/74
T3 成功推出了一般图最小点覆盖!然后下午才意识到原来是二分图。脑瘫。
T1 一开始想假了然后整了 1h 才过,呃呃。
T2 写 floyd 找环写了一年,因为点数
T3 没仔细看。但是仔细看了也不会,下午瞎写了个建模结果还假了。不会流阿!!!
T4 lxl。
R28 T3 deadline
还是不会。
考虑特殊性质二,相当于选择右部点每个点与左部点哪个点进行匹配,而左部点如果有一个点已经被匹配了那么右部点可以选这个点从而不增加贡献,那么我们考虑转化成左部点之间连边,然后要求每条边两个端点中至少选一个点,最小化点数,注意到新的图仍然是二分图,于是二分图最小点覆盖可以变成求最大匹配。
一般情况也是类似的考虑,新的限制相当于两个集合中至少有一个集合内有点,考虑给每个题目建一个点
唉好像大概是这么个意思,我没懂这个建模咋出来的,反正好像挺对的
感觉需要加训一下流与图匹配相关内容啊!
2024.1.21
白天摆大烂了,本来想写那个 B 题结果又没写,做了一上午加半下午的数列不等式题,感觉有一定意思,但好像也不多。晚上打 ARC,很感动的没下分。
不过好像题没有很有趣的所以就不写了。
2024.1.22
额不想写了,不知道为啥又巨累,上午基本摆了。T3 正解但是少了几种情况,调了半天也不会最后摆烂了。T2 实在不想写这种仔细卡状态大小的题了。
不知道为啥最近感觉非常累,唉直接摆烂到 THUWC & WC 吧,两个 WC 完了就放假了,也挺好的
R29 T3 哈夫曼回路
简要题意:有
考虑每一条边至少覆盖一次是个很不好的东西,不过我们考虑一条边如果被经过了多次,我们把经过多次看作重边,这样相当于加若干条边,使得每条边恰好经过一次,这个东西显然是欧拉路径,只需要奇点个数为 0/2 即可。而仔细分析,发现每两个相邻矩形恰好会产生两个奇点,我们可以把这些奇点全部拿出来,恰好可以形成一个
区间查询显然可以线段树上矩阵,建树复杂度
唉 nfls 群里有人因为开大时限让
CF1375G Tree Modification
我草 anton 还是太智慧了。
考虑以
2024.1.23
100 / 100 / 100? / 35, sum 335, rk 5/76
从下到上依次为:朴素
乐。
唉感觉这个排名浮动还是挺乐的,打的各种玄幻。
R30 T3 点点的圈圈
简要题意:给
首先发现这是一个类似于最长反链的东西,不过有一个最大权,但是本质其实还是相同的,简单推一下线性规划的对偶就发现这个问题的对偶问题是选出最少条链,使得每个点至少被覆盖
重点在于如何建树。
我们充分发扬人类智慧:
将所有点全部绕原点旋转同一个角度,然后按坐标排序
根据数学直觉,在随机旋转后,不在圆内但坐标与圆重合的点肯定不会太多
所以我们取相邻区间内的所有点进行 check
这样速度快得飞起,在时都可以在 1s 内卡过
额当然不是这么做,考虑扫描线,我们从左到右做扫描线,每与一个圆左侧相切时加入这个圆,右侧相切时删除这个圆。注意到与圆的交点之间的相对位置关系是不会改变的,那么我们可以维护所有交点,然后类似于维护一个括号序列。插入一个圆相当于在某个位置插入一对括号,然后问包含这个括号的父亲括号节点是什么。我们找出这对括号的前驱,如果这是一个左括号,那么说明这个括号就是包含它的点,直接设父亲为它,如果是右括号说明是它的兄弟,父亲设为它的父亲即可。拿个 set 维护即可,复杂度
CF103E Buying Sets
SoyTony 跟我说半天直接建模就完了,我真的不会直接建模,不过整了好久之后得到了一个不是直接建模的做法,但是其实感觉好像比那个神秘建模想法要自然很多。
首先显然可以建二分图,题目中给的条件就是存在完美匹配。那么我们先随便找一组完美匹配,然后尝试将限制往完美匹配上凑。
注意到,如果左部点一个集合与其邻域大小相等,那么此时这个邻域恰好就是左部点所匹配的所有点。假设说邻域比左部点集合大小大,那么说明左部点一定有一个点连向了一个不是这个集合内的匹配点的点,那么此时我们可以钦定必须选上这个点在左部点中对应的匹配点。即,如果左部点集合内选
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】