做题记录
感觉一直把一些做的其他题放在复健里也不太对,所以新开了一篇。
[CF1368 F]
solution
题面:这是一道交互题。
Alice 和 Bob 正在玩游戏,有
游戏由 Alice 先手,她每次可以选定任意一个正整数
每一轮 Alice 操作后 Bob 再操作,被称为一个回合。Alice 想要在若干回合后让开着的灯的数量尽可能多,而 Bob 希望这个数尽可能少。
你需要写一个程序模拟 Alice,以帮助她完成最优策略,Bob 则由交互库来模拟。
设在最优策略下,若干个回合后开着的灯的数量的最大可能值为
做法:发现 Alice 为了尽可能多,肯定要打开一些不连续的灯。打开到一定程度,使得灯被迫有
假设间隔是
对答案式子进行上取整和根号的分类讨论,可得
时间复杂度
1 | //2021.10.19 by ljz |
[CEOI 2016] kangaroo
solution
题面:固定第一个数和最后一个数的长度为
做法:考虑从每一个合法排列往前构造。假设现在有一个合法排列了,我们删去它的最大值,发现整个排列被分成两段,且端点要么是起点或终点,要么是波谷。不断进行这个操作,发现删去的顺序一定是唯一的,同时每一段的端点要么是起点或终点,要么是波谷,要么就是自己一个数。我们拿这个做
时间复杂度
听说这被称作水淹笛卡尔树?不太懂。
1 | //2021.10.28 by ljz |
[SNOI 2020] 区间和
solution
题面:有一个长度为
0 l r x
表示对于,将 赋值为 ; 1 l r
求区间的最大子段和。即: 。
做法:显然的
分析一下,按照那套逻辑,我们还要维护前缀最大值中有几个最小值,后缀的,全局最大的,发现这也不够维护所有信息,于是还得维护个能改变区间结构的最小取 容易的,于是就给我写麻了,好难写捏。
时间复杂度你冷静分析一下,大概是要
1 | //2021.11.9 by ljz |
[JOI Open 2016] 摩天大楼
solution
题面:将互不相同的
做法:直接考虑从小到大插入似乎不太行,因为和不是单调的,所以
但如果考虑将
坑:
1 | //2021.11.12 by ljz |
[TC12336]
solution
题面:给你一张图,要求删去若干条边,让残余图无论以什么形态都不能有边相交。求可以得到的残余图数量。
做法:观察一下就只有三角形或者菊花是可以的。于是枚举哪个点作为菊花的中心点以及有几个三角线即可。注意只剩一条边的情况会被端点算重,减掉即可。时间复杂度
[CF674 F]
solution
题面:酒店中有
熊喜欢喝果汁,它们不喜欢喝葡萄酒。但是它们无法仅通过颜色和气味辨别果汁和葡萄酒。
一只熊可以一直在晚会上活动而不睡觉,除非它喝了葡萄酒。当一只熊喝完葡萄酒后,它立即会去睡觉,且在晚会期间不再醒来。
现在有若干个酒桶,每个酒桶中装填了果汁或葡萄酒,其中恰有一个桶中装了葡萄酒。酒桶的主人为了测试熊的智力,给它们一个如下挑战:
晚会会进行许多天。每天,会依次发生如下三件事情:
每只熊需要选择一个桶的子集 (可以为空集),多个熊可以同时选择一个桶。
每只熊需要把它选择的桶中的所有饮料都喝一小杯 (假设桶足够大,够所有的熊喝)。
对于所有喝到过酒的熊 (喝完饮料后它们自己能发现是否喝到过酒),马上会上床睡觉,并在整个晚会期间不再醒来 (i.e. 即它们不能参与剩下几天的活动了)。
每张床恰能容纳一只熊,如果有熊无床睡觉,则挑战失败。
如果晚会结束后,这些熊中至少有一只没睡觉,且没有无床睡觉,并且它们能推理出哪个桶中装了葡萄酒 (假设熊足够聪明),则挑战成功。
容易证明,对于一个确定的
给定正整数
做法:通过手玩样例
于是枚举每一桶饮料喝的熊的数量
再加上熊不能全喝醉,所以答案就是
注意到
1 | //2021.11.18 by ljz |
[CF674 G]
solution
题面:给定一个长度为
做法:考虑摩根( 忘记名字了 )投票法,就那个加一个就删一个的。注意到
1 | //2021.11.19 by ljz |
[Code Festival Final 17 C]
solution
题面:来自世界各地的
记
做法:首先注意到鸽巢原理,
1 | //2021.11.21 by ljz |
[TC12118]
solution
题面:有两个由
做法:注意到记录代价无意义,因为一个合法方案一定是有将第一个串变成第二个串,然后在每个位置循环变化,所以实际上记录代价可以被记录变化次数所代替。
令
[Code Festival Final 17 F]
solution
题面:有
做法:首先根据每两个相同数字都要在不同的纸张,以及不同纸张之间都要有相同的数字,可以得到
第一张到第
1 | //2022.2.26 by ljz |
[TC12161]
solution
题面:有
做法:肯定想要越大的越少出现,那么除了最小的,其他都是出现一次,即一个 V 字形。剩下来的直接贪心就可以了。时间复杂度
[LG6327]
solution
题面:中文不会自己看?
做法:考虑那个啥公式,就
1 | //2021.11.25 by ljz |
[CF453 E]
solution
题面:你有
提雷克会给出
做法:考虑 当然可以注意到这是分段函数,所以可以上闵科夫斯基凸包和。
坑:这题实现上一车细节。比如就 RE
。( 我不会说我写了一个半小时的 )
1 | //2021.11.30 by ljz |
[Wannafly 6 E]
solution
题面:中文题面不会自己看?
做法:所以说构造题千万不能看样例和数据范围啊。
1 | //2021.12.1 by ljz |
[Ynoi2007] rgxsxrs
solution
题面:中文题面不会自己看?
做法:整体或树上操作都类同于
1 |
[CF739 A]
solution
题面:长度为
做法:注意到最大值不能超过最短区间的长度,考虑构造这个下界。发现循环
1 | //2021.12.6 by ljz |
[CF733 C]
solution
题面:有
一秒钟内,能让恰好一个怪兽吃掉相邻的比它重量小的怪兽。重量大的重量加上重量小的的重量;重量小的怪兽死掉。死后重新靠拢。
求一种顺序,变成:共
做法:注意每次合并的一定是一个区间,那么就可以逐个确定是否能构造出
1 | //2021.12.7 by ljz |
[CF429 E]
solution
题面:给定
做法:绝对值之差小于等于
坑:因为相邻点连边了,所以空间要乘
1 | //2021.12.7 by ljz |
[CF725 C]
solution
题面:给一个长度为
做法:注意到若我们按原字符串直接塞入网格中( 即第二行处的末尾和第一行的末尾相连 ),我们不断向前旋转这个网格,相邻的字符仍然是相邻的。那么只用考虑那个出现两次的字符。出现两次的字符我们保留一个即可,设另一个相邻的字符是
时间复杂度
1 | //2021.12.8 by ljz |
[ARC093 D]
solution
题面:构造
做法:注意到
1 | //2021.12.10 by ljz |
[Code Festival Qual 17 A]
solution
题面:给定一个
做法:
1 |
[POI 2011] IMP
solution
题面:给定一张
做法:高中时就知道的题了,结果现在才第一次做啊。
注意若两个点之间没有连边则一定不会在一个团里。考虑每次删掉两个不在一个团里的点,那么最多删
1 | //2021.12.14 by ljz |
[CF765 F]
solution
题面:
做法:一眼莫队,然后想把添加改成删除也去不掉 set
这一个
接下来先考虑一个大暴力,离线下来后,考虑每次添加一个
1 | //2021.12.21 by ljz |
[Gym102956 K]
solution
题面:有
做法:注意到可以先用一些少的果子让下面的木板被破掉,然后上面的果子就不会被除二。于是会考虑区间
1 | //2021.12.23 by ljz |
[统一省选2021 A卷] 矩阵游戏
solution
题面:中文不会自己看?
做法:
1 |
[TC12304]
solution
题面:给出一棵
做法:
1 |
[CF708 E]
solution
题面:有一个
除了第一行和最后一行,其他每一行每一天最左边和最右边的格子都有
求
做法:纯高中数列题。
考虑一个暴力
其中
发现这个转移正着有点难讨论,不如算不交,即
写好看点,即设第一个 $\sum$ 为 $F(i-1)$,第二个为 $L(i-1,l)$,第三个为 $R(i-1,r)$,那么就得看看这三个咋求。
首先根据对称性,有 $L(i,x)=R(i,m-x+1)$。
可惜 $L,R$ 还是 $O(n^2)$,我们把它们拆解一下,即
注意到 $F_L$ 的形式很类似 $F$,所以我们类似地去推一下式子
于是就得到了一个递推过程,一共
1 | //2021.12.27 by ljz |
[loj6215]
solution
题面:中文题面建议自己看。如果读不懂可以手玩下样例。
做法:完全不会,直接偷学 EI 和 xy 的做法。
我们想把后面对应每个
令二叉树数量的
为了方便起见,在
利用固定根,枚举左右子树来得到
解释下最后一条式子,考虑到
最后算出
分子那个可以先不管,最后乘上组合数即可,那么求的就是
这样的话,我们只要求出
这是比较容易的,用一个拉格朗日反演即可,即
这个二项式系数至少可以在
然后我们会发现自己忽略了
1 | //2022.1.1 by ljz |
[CF891 B]
solution
题面:有一个长度为
做法:一道降智题。
不要被构造题的数据范围迷惑了。平凡地,我们认为
1 | //2022.1.10 by ljz |
[CC NOV19A PBOXES/CF802 O]
solution
题面:不会有人不知道 codechef 有官方汉化吧,不会吧不会吧。
做法:典中典之模拟费用流,之前因为实在不想写代码所以一直没用这种做法。
首先建个费用流模型,方便起见,我们将以前习惯的四层图模型改成三层,因为这类题的边是单向的,CC 这题经过贪心后也是单向的,CF 那题本来就是要求单向的。即
这种题的增广都有一个很好的贪心性质:不会退回已经增广过的有权值边。这个性质保证了我们的增广路径实际就两种,一种是从
第一种增广是随意的,只要找到左边一个最小的