构造题做题记录
本文同时发表在个人洛谷博客
2023.8.19
CF1016D 1800
CF1684D 2200
交了十发,受不了了,看了tj,发现一开始的思路是对的,后来越改越乱。
先处理MEX后让DIFF最小即可。
CF1270系列
A 800
判断一下是否有最大的即可。
B 1200
转化一下即为 \(\exists i,j,a_i-i>a_j-j\),正反各跑一遍即可。
C 1400
如果直接满足则不加;
否则,先加上异或和,再加上和加之前的异或和,易证明正确性。
D 1900 交互题
发现 \(k<n\) ,则先对 1 至 n 进行操作,把得到的 \(id\) 和 \(val\) 单独存起来,然后去掉 \(id\) ,加上 \(k+1\) ,则可求出 \(k+1\) 和 \(id\) 的值的大小关系,之后每次去掉前 \(k\) 个除 \(id\) 外任意一位,加上 \(k+1\) ,则易推导出该位与 \(id\) 位之间的大小关系,累加即可,共询问 \(k+1\) 次。
E 2300
发现可以将奇偶分开讨论,则和为奇的分为一组,和为偶的分为一组。
第二组样例完美hack
接着发现可以旋转使全部都是奇和全部都是偶的点翻转成有奇有偶的,解直线方程即可。
时间复杂度 \(O(n\log 10^6)\).
2023.8.20
月赛打炸了,两个shaber题挂了
计划暂时搁置,先去刷dp
2023.10.31
怎么到了CSP之后才来填这个坑?/fn
我绝对不会告诉你这是因为我又又又挂在shaber构造题上面了!/fn/fn/fn
agc029c 铺底黄
呜呜呜。
显然满足单调性,直接二分,则变为判定某一大小的字符集是否满足,无脑用栈模拟即可。
时间复杂度 \(O(n\log n)\)。
呜呜呜为什么要写100行树状数组
agc035c 实心黄
通过样例,我们猜想要找基元。
考虑四个数连在一块的情况。发现例如4-5-6-7-4-5-6-7的情况即可满足。
因此除了开始的三个用样例的方案做之外,剩下的每四个连成一组。
还剩下几个数。分开考虑。
只剩一个只要不是 \(2^k\) 直接把所有位的串连起来。
剩两个和三个的都可以在某一组上乱搞解决。
时间复杂度 \(O(n)\)。
2023.11.2
昨天膜你赛,被线段树分治给薄纱了,没做构造。
hitachi2020c 空心黄
发现当每一层是 1 2 1 2 的时候非常优,直接分层跑,1和2用完就用3。
交上去WA了一片
可能会出现奇数层或偶数层的点个数填不满1和2的个数的情况。发现在这种情况下在那一层全填3即可。
时间复杂度 \(O(n)\)。
CF1311E 2200
好题,但是可以加强。
发现答案上下界很好求,直接判断是否有解。
构造一颗完全二叉树,每次从右边删边往左边加,就可以控制到所有答案。
时间复杂度 \(O(n)\)。
Luogu P5749
IOI2019的题,果然是 IOI < NOI < ZJOI。
先固定左鞋子,发现当从左往右扫时,选择最左边可以组队的右鞋子肯定不劣。
然后将所有要组队的鞋子排序,按照一个方向移动即可。
时间复杂度 \(O(n\log n)\)。
hitachi2020e 实心橙
成功浪费20发评测资源。
先挖掘一些性质,发现
\(\begin{pmatrix}1&0&1\\0&1&0\\1&0&1\end{pmatrix}\)
这样的矩阵在 \(3 \times 3\) 时是最优的。
因为要求 \(2^n-1\),因此考虑中间用线隔开。
可以发现,分隔线交替为全0和全1时最优。
全0时交叉点要选择1。
CF1283F 2200
有点虚高。
发现 \(2^k\) 说明是包含编号最大的点的最浅子树的根。
如果每次对于最大数直接连边,显然可以发现每次跑完之后新的点一定在之前连接过,直接无脑模拟即可。
时间复杂度 \(O(n)\)。
2023.11.3
CF925C 2200
从高位往低位考虑,每一次只需计算之前插入数字在该位上为1的个数,在每个数之前插入即可。
时间复杂度 \(O(60n)\),存在 \(O(n)\) 的实现。