202410 测试笔记兼停课记录
前言:定义
吸收暑假教训,励志补完每一套测试题!2024/10/10:感觉是补不完的了。
今天本来要上文化课(我们
早上 Lgx_Q 讲动态规划,下午测试:
T1 AT_abc354_d [ABC354D] AtCoder Wallpaper
解析:不想写,弱智找规律,不知道为啥还能有绿。
由于列的规律更多一点,所以先拿两个变量算出
T2
简要题意:在
解析:设组成的序列是
这是一个 trick 吗?不知道是怎么想出来减去下标的。
T3 P7967 [COCI2021-2022#2] Magneti
解析:设
自己开一段答案: 。 接到之前的某一段答案,还有左右加入之分,所以要乘上 : 。 合并左右两段答案,放在中间要花费左右 倍的距离,此外,不知道合并哪两个序列,直接乘上 ,但是同样有左右之分,再乘上 分母就没了: 。
最后统计答案:对于每个
考场想到一个很不正的做法,多组数据样例错一组,不会改,没有想,喜提
这个正解是很典的排列 DP,但我测试时还没掌握排列 DP qaq。
依旧早上 Lgx_Q 讲课下午测试。
T1 P6471 [COCI2008-2009#6] DOSTAVA
解析:横着走直接前缀和处理,每一行的两端构成一张点数为
忘记处理同一行的情况爆挂
T2 AT_abc176_f [ABC176F] Brave CHAIN
解析:设
对于取
设下一波进来的三张牌分别是
1. 有贡献的情况
(1).
直接扔掉新进来的三张,它们不参与后面的转移,所以用一个
(2). 有两张牌相同
根据异或的性质,
此外,如果手上拿着两张
(3). 三张牌都不相同
如果手上拿着两张
2. 没有贡献的情况
(1). 留两张新进来的牌
直接
(2). 留一张新进来的牌
转移太多,不好写,可以用一个 vector 之类的存下当前这一步所有要转移的 DP 的信息,在这一步的最后用循环拿出来提取信息转移。
其实思路和做过的 CF82D Two out of Three 思路很像,但这个转移太复杂,考场没想清楚,直接觉得不可转移。
依旧早上 Lgx_Q 讲课下午测试。
T1 GYM101741J Subsequence Sum Queries
解析:分治 + DP 好题。
把所有询问离线下来,用 solve(l,r) 来解决位于
先从
然后处理跨过
加上分治的时间复杂度,总时间复杂度为
T2 P7242 [COCI2019-2020#4] Klasika
解析:两点间的路径异或权值,就是根到两点的异或权值再异或起来,沿用 P4551 最长异或路径 的思路,建一棵 01Trie,询问根到其中一点的时候,往另一点反方向跑。
用一个 vector 存起来每个节点为询问终点的问题,当处理完这个节点的所有子树时用启发式合并的方法(轻儿子合并到重儿子上)合并子树,然后处理这些问题。
对于询问和增加先后的问题,打个时间戳写个可持久化的东西,然后进入节点的时候判断时间戳是否合法即可。
早上测试,下午是一个不认识的学长讲题,然后难得有时间调题,把
T1
简要题意:大模拟有概括的必要吗。

死去的麻州扑克开始攻击我。
解析:假定已经选好了两个雀头,可以发现剩下的牌里面,有三个一对的一定可以先取出来,所以从小到大取即可,用一个计数数组
情况二就直接再暴力枚举加哪张牌就行了,套个常数,再加上
T2 P8191 [USACO22FEB] Moo Network G
解析:观察到
设存在三个点
, , , 且 ,即 点不是 点在 这一层向左最近的点。 易得
是直角三角形或钝角三角形,其中 是最长边。直角三角形两短边平方和等于第三边平方,钝角三角形则是小于。按照 Kruskal 的贪心逻辑,一定会先连上 和 , 没用,证毕。
什么**样例,点的编号和横坐标写混了垃圾样例没测出来,爆挂
T3
简要题意:一个有向图有
解析:考虑分治,每层分治处理跨过
用
对于(1)(4),只需要从
那么做法就出来了:先把右区间的(4)处理出来并存进前缀
T4 P8189 [USACO22FEB] Redistributing Gifts G
解析:考虑建图,节点
设
当
当
铁定超时,发现瓶颈在枚举每种点集状态的起点,但这是完全没必要的,可以直接让
接着考虑解决问题,设
for (int s = 1; s < 1 << n; s++)
for (int t = s; t; t = s & (t - 1))
什么?我能停课?什么?我能停课?什么?我能停课?
我期待这一天已经一天了,得亏我
早上 GP 神力!,发现机房电脑巨抽象且不会重置,配置了一会环境(包括物理环境,你那键盘架子咋还爆掉了啊,桌面上咋那么多杂物垃圾啊),摸了会鱼。中午去食堂吃饭,
T1
简要题意:
解析:很简单的整除分块……把
纯人机,我用 STL 把两组整除分块的结果给存了下来,最后再一起算……大数据不能用 STL,能直接算出来的为什么要存,爆挂
T2
简要题意:
解析:首先手玩,易得每一组
设存在一组符合题意的答案
由题目
只有
T3 AT_joisc2014_e 水筒
解析:由 P1967 [NOIP2013 提高组] 货车运输 的思路,用最小生成树 + LCA 做,问题在于怎么建图。
由于路径的性质,可以贪心如果存在路径
纯细节题,没想到怎么建图,超级大暴力拿
T4 P7363 [eJOI2020 Day2] Dots and Boxes
解析:根据题目的限制,形成的可操作的连通块全都是长度至少为
因此,只要先手在某条链或环上下了一笔,出现了一个只剩一笔就能填上的格子,后手就可以顺着这个格子,直接把这条链或环里的格子全部填上,自己成为下一轮的先手。
但显然还有方法让后手不使得自己成为下一轮的先手:后手填完整条链的大部分格子之后,留两个相邻格子给先手,先手只能一笔拿下两个格子,或者直接去操作下一轮,但都会成为下一轮的先手,对于环则需要四个格子。
但是如果有长度为
所以,后手有两种选择:
拿下整条链的所有格子,自己变成先手。
拿下
或 个格子,自己还是后手。
设
链的情况:
环的情况也同理,不过环没有不可以“保留后手”的情况:
早上六点五十起,七点多一点经过高三楼下还被值日老师抓了要登记(乐),说是七点二十到结果七点半过了不久高中的才早读完来给我们开门。白天没有讲课没有测试,补了昨晚前三题和
T1 CF1375C Element Extermination
解析:玄学做法。以序列最后一个数为
完了不知道在干嘛做道黄题做了两个小时。
T2
简要题意:给定一棵
解析:首先易得等分成
对于叶子节点而言,一定存在一棵子树包含它,否则它不可能被分好组。考虑从叶子节点往上一块一块搜,统计子树大小
考虑优化,对于
完了不知道在干嘛做两道题做了三个小时。
T3
简要题意:有
解析:观察到
很明显可以矩阵加速,设
但是最后的答案是
矩阵乘法是竖着加起来的。
本来九点搞完两题摆烂了,九点半突然听到可以用矩阵乘,半个小时干出来了。
T4
简要题意:一个二维平面中有
解析:显然首先要知道不同的活动空间,和这个活动空间拆除左挡板或右挡板时的活动范围。假设用
这部分可以用 扫描线 解决,在
如果有两段区间分别是
, ,更新 时会把第二个区间也给更新了。
对于本题并不存在,因为如果
处理出来这个区间之后考虑 DP,先将区间按
T5
简要题意:设
你需要输出答案对
解析:为了这题补了一堆课……
按位考虑,设
考虑如果只有
接下来考虑加入
枚举
首先可以想到前缀和,因此问题变成怎么求
设
发现
对于一个
但是还没完,拉格朗日插值要用除法,这里有取模,要用逆元,扩欧爆空间,模数不是质数又用不了费马小定理……引入一种新的求逆元方法:欧拉定理。
首先,对于
欧拉定理的内容是:模 前世学习欧拉函数的记忆:
,若 是质数且 ,则 。
递推可以得到
int inv(int x, int y) {
while (!(y % 2) and y)
y /= 2;
return x * Pow(y, (1ll << 31) - 1) % mod;
}有一题和这个很像(特别是前面关于
早上点了 KFC 早餐,GJ 昨晚居然没锁门,直接就进机房了。上午补了
T1 AT_abc188_e [ABC188E] Peddler
解析:拓扑排序签到题。
BYD 题面没强调一定要交易,那组凸显出一定要交易的样例还被 GJ 删了,无敌了。
T2 CF1696E Placing Jinas
解析:哪里不会(有数)点哪里,发现每一个格子要点的次数构成一个斜着的杨辉三角,直接求和肯定 TLE,用横平竖直的格子视角观察这个斜着的杨辉三角,格子一行到第
T3 AT_joisc2017_c 手持ち花火 (Sparklers)
解析:最大值最小,可以想到二分。
二分出来之后,考虑从
化简,得:
设
。 , 。
向右扩张成
。 , 。
从
话说这个题目背景画进漫画里是不是篝火晚会跳舞的存在(雾。
T4 CF526G Spiders Evil Plan
解析:选一条路径肯定选择两个叶子间的路径,如果选的路径数的两倍比叶子数还要多,那么直接输出整棵树的边权和。
先不考虑必须覆盖某个点的限制,假如以
如果每次询问都这么跑一次,会 TLE。观察发现经过
所以只需要以直径的两个端点为根,跑两个树剖就可以得到两棵树中,每条边属于的长链,全部加起来再排个序再稍微操作一下,就可以得到每条长链的长度,和每个节点所属长链的长度在这棵树中的长链长度的排名(以下简称为点的排名)。
接着考虑必须覆盖某个点的限制,设
- 为什么是
条而不是 条呢?因为根是直径的端点,一定是一个叶子节点,叶子节点上的路径只能由 条链组成。
否则有两种策略,第一种是不要当前第
第二种是
码量巨大,我写了
Day
早上学了个最简单的拉插,然后就补了一题有关拉插的(
Day
睡大觉,追大番,抽大机。
晚七点,回学校,摸大鱼。
回学校盯真发现
Day
逆天
T1
简要题意:一个
解析:假设
第一步,求出每个点属于哪个房间,一遍
第二步,求出从起点到每个房间的最大代价
第三步,建图,可以证明如果两个点之间有连线,且这两个点组成的矩形内(包括边上)还有其他空间,那么显然可以从起点跳到那个空间再跳到终点,这条连线不优。这种组成矩形的问题可以用单调栈求,但单调栈对处理恰好矩形边上有两个点(起点和终点)的问题并不好用,所以考虑换一种方法。从上往下考虑,设
第四步,DP 求答案。设
找到最大的
看步骤挺简单代码要写
T2 CF1310E Strange Function
解析:对于
对于
当
当
暴力判断时,应尽量将每一层较大的数放在前面,这样可以使得最终的序列尽量短。
T3
简要题意:构造一个只由
解析:很容易想到每一行都填
相加得到
先把表填满,接着从
其实也很简单,共有如下几种情况:
位于第
列。 位于第
行:这个 无法和下面的 组成答案,只能贡献 个。 其他情况:这个
和上下的组成答案,贡献 个。
其他情况。
位于第
列 位于第
行:和左边,左下,贡献 个。 位于第
行:和左边,左上,贡献 个。 其他情况:和左上:左边和左下,贡献
个。
其他情况。
位于第
行:和左边,左下,右下,右边,贡献 个。 位于第
行:和左上,左边,右边,右上, 个。 其他情况:
个方向: 个。
这个方法码量应该算比较少了,
考场算错数(没算出来
T4
简要题意:有排列
解析:考虑将
先求出
然后考虑 dp,当连续段个数为
Day
早上补
Day
早上成功把之前欠的题给补完了(翻译:补了一题)。中午给自己买了生日礼物(迫真)。下午摆了一会,做了一道 ABC375G(笔记)。晚上摸鱼,把我用了快一年的洛谷 R☆ 主题换成 やなみ 了。
Day
早上洛谷刷了几题,复习了一些算法,把 GDKOI 的时候想学的凸包给学了(不过忘记为啥要学那玩意了)。下午打 ABC369(笔记)找 J 组手感,挺简单的一场,有生之年我能
T1
简要题意:在一个长为
解析:诈骗题,只需要从左一路往右,能加则加,就能通过。那些“先合后面的大数更优”,算一下或者随便举几个例子,就会发现都和从左往右加是等价的。
T2
简要题意:有
解析:先判断无解的情况。容易想到直径最短的情况是横着连,然后再竖着从中间连一整条。但是列数的奇偶会影响这一个值,关注到在这种情况下行数不会影响这个值,所以先尽量将列数变为奇数(swap 一下)。
手玩可得列数奇数时,直径最小是
接着采取
但是可能会还差一个,把最后一行的逆时针旋转左下角的横边,或者顺时针旋转右下角的横边一下就行了。如果这一行中间那一条是往右的就旋转左下角的,否则旋转右下角的。
这是旋转左下角的情况,将蓝色往下旋转:

码量
这样写就可以在 GJOJ 中的随机数据中拿下
如上图所示,设此时

红边是要走的,咋就打断了呢?所以这个时候选择将最后一行的竖线再左 / 右一格,增加
这种情况不能乱用,当且仅当倒数第二行的竖线被移动到尽头了才能用,否则答案会错。
接下来就是毒瘤情况:

比如这种情况,如果它上面还有更多行,它肯定是从
所以考虑先弄成弓字形,然后加加减减。
然后又会发现漏掉了工字形和
……
码量变成
T3
简要题意:给定一个只有
解析:又是我又爱又恨表达式题,但是这个挺简单。
由于已经规定运算顺序,所以可以直接对每一层拆成左右两半递归。用
是码量低达 优质表达式题目。
T4 AT_cf16_exhibition_final_e Water Distribution
解析:操作两个点一定是只操作一次最优,而操作成一棵树肯定比操作成一张有环的图更优(如果成环了,某个点先减水后加水,血亏;如果成图了,汇在一起的地方消耗了更多的代价)。
因此操作的路径能够在图上组成一棵棵树,先处理出每棵树的答案。
接着考虑整张图的答案,整张图的答案由若干个连通块组成,所以设
答案是
Day
早上补题,下午摸鱼,晚上测试,一题不会。心情不好,打完暴力,写抽象小作文。
T1
简要题意:给出
解析:由
T2
简要题意:有一个字母
解析:由
证明:
T3
简要题意:有一个
解析:发现并不关心这些数的数值,每对关系的实际意义就是
发现不同的
容易想到
如果有连边
如果某个点没有限制要求,且不是无解,这个点取啥都行,输出无数解。
然后处理出每个点的
如果有连边
,且 ,那么 不能不取最大值, 里包含上 。 如果有连边
,且 ,容易证明两个点的 都等于 (不可能大于,小于就无解),这时如果一个不取最大值,另一个就要取最大值。
接着开始算答案,由于
设
两半都做完一遍之后,对于左半,高维前缀和合并;对于右半,直接一边枚举一边统计答案,如果右边选了
所有质因子的答案相乘即可。
T4
待补。
Day
七点整没走被宿管怒骂,但是我们七点二十才上课且不用早读,有个宿管是 lyt 他爸,他说肯定是我们半夜抽手机,严查,不过我觉得十点四十关灯睡到七点也不算多。然后是鲲鹏班的今天来上课了,在
中午 cjrawa 没带饭票,我把饭票给他,我刷饭卡。石中饭卡在食堂好像有单笔不得超过
早上测试接着挂大分,挂了
晚上打了 ABC,花二十分钟多一点把前五道水题切了,然后摆烂。
T1 [ABC103C] Modulo Summation
解析:易得
T2 P3106 [USACO14OPEN] Dueling GPSs S
解析:对两台 GPS 都跑一次倒着的最短路,设
某个点通往
你永远无法理解一个人为什么要跑两遍 Dijkstra 然后跑一个爆搜,挂
T3 CF920F SUM and REPLACE
解析:这种类型的题太典了,本质上来说,昨天的 T1 也是这种题。
先线性筛预处理出
关于如何用线性筛求出
设
表示数 最小的质因子在 中出现的次数,如 ( ), ( )。 设
(即由 推到 ),如果 , , 因为根据线性筛的筛法,每个数只会被自己的最小质因子筛掉,所以
且 的最小质因子 ,结合上面条件就可以知道 的最小质因子不等于,即大于 ,所以 目前只有 这一个最小质因子, 。 的每一个约数都是 的约数,每一个 的约数乘上 也是 的约数。而 说明不存在一对 的约数 ,能使得 ,因此上面提到的两种 的约数不会重复,直接乘 即可。
如果
,那么 , 。 同上面的推导方法,根据上面的条件,
和 的最小质因子都是 ,转移即可。 这个时候会有重复的情况,只需要运用前一种情况求
的思路,先除去 所代表的质因数在 的约数中的贡献再乘回去即可。
这是并查集的代码:
for (int j = x; j <= y;) {
// update...
if (a[j] <= 2)
un(j, j + 1);
// 注意是 j 指向 j + 1,保证 gf 出来的一定是还需要修改的数
do {
j = gf(j + 1);
} while (j <= y and a[j] <= 2);
// 跳
}GJOJ 甚至是
T4
简要题意:有一个
解析:由于
设点
接下来是第二步,枚举五条边中间的边,设这条边是
所以要减去
接着算三元环的情况,由于三元环只有三个点,暴力枚举即可,对于一个三元环,它有以下几种的不合法方案:
上面的三种和
最后算四元环的情况,枚举四元环可以枚举它的对角线,然后将和对角线的两个端点都有边相连的点的个数统计起来
发现四元环只有上面这一种不合法的方案,因此每个四元环减去四就行了,而每个四元环有两条对角线,正反都算就是每个四元环都会被算四次,所以直接减去
Day
睡到十点多,早上打 PUBG 发现没手感,然后看了一下午漫画,把剩下
晚上六点二十出门回学校,结果黄岐大桥日常塞车,
如此颓废,何以 CSP。调昨天 T4 还调不出来,直接妈妈生的。
Day
T1
简要题意:给定两个长度为
解析:可以想到每次给一个数加一,对于相同的数,一定取
T2
简要题意:定义最小生成树是指边权二进制或下和最小的生成树。给出一张
解析:考虑拆位做,枚举每一位是选
具体来说,先假定这一位选
每次询问都跑一遍肯定超时,但是发现一条
如果第
发现这个操作执行了很多次,可以用个结构体就不用反复清零或开一堆数组了。
询问的时候,从高到低,如果第
T3
简要题意:给定
解析:伪做法,可以卡到
直接用一棵字典树维护,加权值就直接加在前缀的末尾,求答案的时候统计整个字符串的路径上的所有权值。但是这样会有问题,之前加的权值不属于一个新建的字符串,所以新建字符串的时候统计一下这条路径上之前的权值,求答案时减去这个值即可。
期望复杂度
T4 CF1028H Make Square
解析:先将每个数的质因子个数
这样子每个数的质因数最多只有
处理出数据范围内,每个数除去成对质因子后,剩下的质因数个数,设
对于一次询问
发现答案最大只有
对于当前点的处理,
最后求答案,找到最大的
Day
五楼电脑室清场了,下午去二楼五室摸鱼。晚上摸了没一会就被拉去当内阁布置考场。
Day
把题补到只差一题了,然后早上复习了悬线法,Tarjan,Kosaraju 和 CDQ 分治。下午继续当内阁,晚上测试但是机智的 gj 不告诉我们 freopen 的文件名,于是我们所有人荣获
T1
简要题意:初始时有一个只有一个数,数值为
解析:合并的顺序不影响答案,影响答案的只有个数和总和,考虑能合则合,如果遇到某个
T2
简要题意:
解析:很容易想到图论建模,先把每个人都随便丢去一个他们想去的地点,统计出当前每个地点的人数,然后把每个人想去的两个地点间连边,可以发现,一定存在方案使得一个连通块内的落单人数为
T3
简要题意:
解析:考虑按位处理,算出每一位的贡献,当处理到第
如果当前这一位是
如果当前这一位是
方案数乘上
T4
简要题意:给定
解析:考虑二分答案,二分出这个最大值后,判断是否有
设序列中原本就大于等于这个值的数有
对于每一个数,可以计算出它要大于等于这个值的话,等差序列第一个数的位置最左和最右可以是哪里,打上
Day
早上摸大鱼,补昨晚的题(都挺好写的)。下午摸鱼一小时 + 复习一小时。晚上测试,挂了那么久终于又自己场切两题了(不过还是很人机)。
T1
简要题意:求无向图中包含边数量最少的不同环的个数,点数小于等于
解析:从 ABC376D 中汲取经验,考虑以每个点为环的起点 / 终点,BFS 算出这个点到每个点的距离
然后发现每个环被算了二倍环中包含的点的个数次,除去即可。
小细节调了我两个钟。
T2
简要题意:
解析:对上脑电波了属于是,设
, 。 , 。 ,发现所有贡献出自 的约数,暴力枚举并判断是否合法,一个一个加即可。
这一部分
接着枚举
输出前
T3
简要题意:一个长度为
解析:先处理出每个字母个数的前缀和和每个字母出现的位置,后者用 vector 存起来。对于每个位置,枚举每个字母,如果这个位置和这个位置的字母上一次出现的位置之间,枚举的字母出现过,那么这段区间“有答案性”就是
接着处理询问,枚举由字母
T4
待补。
Day
停课的日子一下就过完了。早上摸鱼,中午睡完觉就起床收东西准备回石实,回家拿东西耽误了一会,最后四点半才到机房,调第三题。晚上 GJOJ 模拟赛没打。
本记录到此完结,共


