Contests
比赛总结
包括自停课以来的打过的各种比赛
#1. NOIP十三连测 #1
T1
70pts
均值不等式
但这是真的, 有 70pts 给了均值不等式
需要注意的是, 可以通过分离变量, 统计是否有满足条件的点
100pts
由均值不等式启发, 我们发现两点连线与坐标轴的夹角接近 45 度 或 135 度,
于是我们考虑旋转坐标轴, 使得
然后问题转化为两点连线和坐标轴的夹角尽可能小
旋转坐标轴以后,
对于新的坐标系, 想要让两点连线与坐标轴夹角最小
按
排序, 此时与 轴夹角最小的两个点一定相邻 (等价于在原坐标系中按
排序) 按
排序, 此时与 轴夹角最小的两个点一定相邻 (等价于在原坐标系中按
排序)
取出最大值即可
#2. NOIP十三连测 #2
T1 写完正解以后把暴力交上去了
真是一场酣畅淋漓的破防啊
T1
我们知道, 一个序列翻转两次相当于没有翻转
于是我们考虑在末尾加完了后翻转, 等价于在翻转后的序列前面加
然后再在末尾加, 再翻转
最终结果就是原序列的后面加入了第一个数, 原序列的前面加入了第二个数
然后就非常简单了
T2
容易发现这就是在求最小生成树
然后要求支持动态加边
upd:
发现只需要对原来最小生成树上加一条边以后形成的基环树求最小生成树就行了
然而最后因为不明原因只有 90pts
为什么能T掉一个题中间的一个点????
T3
排序不等式
先拆柿子
我们又知道让
因此我们希望通过交换操作, 使
可以证明, 每次把
考虑不直接交换过来, 而交换到别的的地方去
“到别的地方去” 最多减少一次操作
然而因为 “不直接交换过来” , 必须还要再次进行交换才能得到我们想要的
于是 “不直接交换” 并不能给出更优的解
T4
见 OneNote
#3. 威海一中 科技特长生期末测试
题目有点过于水了
T4
考虑每个同学只能表示出两个数,
于是可以统计每个数最多可以被多少个同学表示
特别地, 当
容易求得答案
需要注意
xor的优先级 !!!
if (a[i] == a[i] xor b[i])和if (a[i] == (a[i] xor b[i]))所产生的效果并不相同
T5
考虑朴素的暴力, 枚举
对其做一个平凡的转换, 转换为不改变
感性的注意到, 在
这也就启示我们, 答案只有可能在 线碰到点 或者 线在点旁边 时产生
于是直接枚举四条线, 让她们分别碰到点, 容易使用值域线段树求出答案
卡常!
尽量不要用
unordered_set, 常数非常大, 实际体验比set慢
#5. Codeforces Round 957 (Div. 3)
#6. 梦熊模拟赛
2024.7.16
挂大分
不好评价, 最终得分 70 pts
挂分情况:
T1 没判
T2 把
T3 想出正解但没写, 鉴定为码力太弱
T4 大常数暴力被卡成
T1
见 OneNote
一点感想:
计数类
而最优化类
在最优化问题中, 即便同一个局面被表示在不同的状态中, 即便一个局面被多次考虑, 只要不漏考虑局面, 就能够得到最优解
但是在计数类问题中, 这样随意的设计状态的方式不被允许, 因此经常需要钦定一些必要的变量记录到状态中
什么是钦定?
(个人理解)
举一个例子
表示考虑前 个, 已经选了 个
表示最后一个选的右端点恰好为 , 已经选了 个 这里, 第二个就是钦定
如果只是最优化某个值,第一个状态定义是完全可用的
但当我们统计方案数时, 使用第一个状态定义就会算重, 使用第二个就不会
T2
根号分治 ????
容斥 ????
见 Solution.pdf 上的笔记
T3
平凡的线段树
稍微推一推区间合并即可
#7.梦熊模拟赛
唐诗比赛。
不好评价
T1 想出了正解
但是板子挂了, 于是我也挂了
T1
欧拉回路
通过简化 dp 转移自动机, 可以把问题转化为求自动机上的欧拉回路
然后就做完了
你说的对, 但是没有当前弧优化的欧拉回路是假的
于是 T 的跟贪心一个分 (????)
我的一个花两小时想欧拉回路的朋友破防了
T2
有个人对分式求和的时候, 同时对分子和分母进行求和了
破防了。
T3
跟 #3 的 T5 挺像的
决策点只能有
枚举中位数即可
#8.梦熊模拟赛
好啊好啊
T1
正解很困难, 并且依赖排列随机生成这一性质
但是可以转化为静态区间
T2
80 pts 的
并且似乎有一定扩展空间 (?)
T3
数位 dp
剪枝 !
并且, 在不顶上下界的时候, 答案可以直接得出 (通过组合计数的方法)
#9.ABC 363
好啊好啊, ABC 只会 ABC
滚回去学 whk 罢
D
其实想出了正确的思路
但是写出了一坨石山
我们考虑直接枚举长度
会发现增长速度非常快, 于是就能非常快的跳到
然后剩下全是细节, 建议形式化的写出来, 防止再次写出石山
#10.CF
好啊好啊
把 RE 看成 WA
#11. ABC 364
上分最爽的一集
D
发现是二分
如果二分第
于是, 只需要找包含大于等于
然后怎么算区间内有多少个数呢 ?
有个学数据结构学傻的同学使用了动态开点线段树
直接 lower_bound 之类的即可
#12. 梦熊模拟赛
T1
同余最短路
的板子 (?)
T2
叹为观止
实在是太妙了
首先, 由题意知
接下来, 对要求的式子做些变换
原式为
我们先化简底数
于是, 取值实际上仅与
不妨设
考虑钦定
等价于把
等价于把
容易使用插板法得出方案数为
然后, 我们需要保证
等价于把
但是我们发现, 对于某个
不妨设有
那么要把
再把
总的结果为
#13. MX-X2
T1
开场 5min 就注意到了原问题等价于判断能不能构成等差数列
(此时 xhr 还在因为注意不到这个性质而愤怒的砸着桌子)
这是容易判断的, 只需要判断排序后
飞速地过了样例
交上去 WA 0pts
机智 的我很快注意到这个公差可能是小数
于是我把存公差的变量改为了 double
喜提 WA 20pts
改成 long double 以后喜提 WA 50pts
于是我坚定的认为我是被卡精度了
于是我就想到了把这个公差放在模意义下, 碰撞的概率大概是
于是把公差放在模
于是我坚定的认为这个模数被卡了, 把模数换成
急了
鬼故事: 去外面游荡一圈发现 xhr 在写 T3
急了
于是我抢走他的鼠标, 查看他 T1 的代码
发现他完全没处理小数居然过了
急了
然后才注意到如果公差是小数, 那么一定无解
我是唐氏。
T2
注意了好长时间才发现性质
对于一个
最高位与 最高位butong 在
最高位处 为
拆位统计就做完了
#14. MX 炼石 #1
T1
考虑如何凑出一个
最暴力的方法是, 每次执行 1 操作, 然后执行 + 操作
但这种做法太唐了, 我们甚至没有使用 c 操作
容易观察发现, c+ 相当于把原数乘 1+ 相当于把原数加
很难不想到使用类似快速幂的思路, 在
考虑把这个做法扩展到凑出一个序列
我们发现, 每次 + 操作会使前面的数减
但我们又发现, 我们其实没有什么决策的空间, 因为我们已经尽力使 + 操作变得最少
于是我们可以倒着考虑, 记 tot 为后面对前面的减
对于
T2
怎么一车神秘 poly 做法啊
不会 poly 被爆了
我们考虑, 假设我们拥有这个序列的频次柱状图
那么众数出现次数就是最高的那根柱子的高度
于是我们可以考虑枚举高度, 并对柱状图计数
但是这样是假的, 因为每个柱状图可能对应多个序列
不妨设
容易得出这个柱状图对应的序列的个数为
这里实际上是一个 多重集排列数 而不是多重集组合数, 并不需要容斥, 场上就因为这个被秒了
于是我们把问题转化为, 对所有和为
不妨考虑钦定
容易想出来一个 dp, 设
转移也是容易的:
其
所以这样 dp 实际上是对
但这样对一个
总复杂度为
#15. MX NOIP #8
T1
读错题了 /kk
但是很快就发现了,
注意到
因此我们就把下取整给去掉了
这是好的
而在模
其中,
容易使用等比数列求和公式计算 是非常有规律的, 打表可知
因此容易推出前缀和计算公式, 然后前缀和相减即可
T2
数数 /jk/jk
Observations
每个位置独立, 只要把每个位置都变回她们自己即可
每个数的变化存在循环节
把所有数都变回自己的最小步数为所有数最短循环节的 lcm
建图以后, 在同一个环上的数的最短循环节相等且都等于环的大小
建图以后, 图上的所有环的大小之和为
这不废话吗
假做法
lcm 是不是, 那我们就拆位! 拆位! 拆位! 对每个质因子分别处理
这样就把 lcm 的期望转为了最大值的期望
了吗?
注意到每个质因子不独立, 而期望满足可乘性的条件是每个变量独立
爆炸了
真做法
首先有一个经典的小 trick, 和为
具体地, 设
根据观察 5 , 我们知道
再根据观察 4 , 我们知道最短循环节的种类数也是
注意到一些数的 lcm 只与这些数的种类有关
不妨把所有的数按照她们的最短循环节大小划分成
可以
#16. MX 炼石 #2
这就是炼石吗, 好难 /kk/kk
获得了整整 40pts
T1
不是哥们, 这真的不是省选 D1T1 吗
Sub0
一眼可以看出
Sub1
Sub2
神秘思路
场上想了 2.5h /kk
考虑
再考虑每个
聪明思路
考虑
逆序对数为冒泡排序交换次数下界,
为冒泡排序实际操作次数
#17. MX 炼石 #7
数数场。
一题不会
唐完了。
T1
给定 和
首先来考虑对于给定的
诈骗。
记该问题为
唐氏证法
感受到到一个性质,好像中转点至多只需要一个
但是怎么证明呢?
记
记
考虑把树以
在新树上,
若把
接下来证明只需要
假设需要另一个中转点
那么答案为
因为显然有
证毕。
那么对于一组
接下来容易发现
为了简洁,记
注:
的意义是 在树上可以走到的最远的距离 后面其他证法也会用到,不再重复定义
显然求出直径以后,
最终
喵喵做法
考虑距离一个点最远的点一定是直径的两个端点之一
记直径两个端点为
下面证明
首先发现这个东西是必然是答案的上界,因为树上无论如何都走不出比这更长的路径
接下来给出构造性证明,来证明这个值一定能取到
最小化中转点的数量其实是没有意义的
因此在构造中我们并不最小化中转点的数量
记
若
和 是同一个点,那么让这个点作为唯一的中转点 若
和 不是同一个点,让 和 两个点作为中转点 此时答案为
中间的
显然不会让答案变劣,因为他们是直径。
因此我们也得到了
题解证法
容易观察到
证毕。
混 乱 邪 恶
计数
我们要求
发现她等于
我们发现
从本质上看,我们是要对只有
很自然的想法是,枚举这
也就是说我们考虑枚举
我们不妨枚举一个
那么如何求有多少个满足条件的
值域线段树
值域树状数组
求这个东西其实等价于求一个数的排名
对于离线求排名问题,我们直接把
原题目中求的是有序数对
另有一个小细节,
可能产生相等的情况,这时候刚才进行的乘二就会把一小部分东西算重 设两个相等的
为 和 在刚才的计数过程中,我们枚举到
的时候认为 和 组成一对产生贡献 同时我们枚举到
的时候认为 和 产生贡献 如果就此打住,那么我们没有算重
但是我们又把方案数乘上了
,这下爆了 我们考虑给相等的元素随机赋权,排序时以
的值为第一关键字,随机权值为第二关键字进行排序 那怎么保证不重不漏呢?
我们前面算贡献次数的时候相当于在算无序数对
的数量,再乘二得到有序数对的数量 为了得到无序的效果,我们钦定随机权值小的
和随机权值大的 配对 这样,我们在考虑
的时候认为 可以和 产生贡献,但是在考虑 的时候并不认为 可以和她产生贡献 上面这一段话的人话翻译:直接调用
sort不用去重,排序后第个数 能产生贡献的数对的个数为 因为随机赋权其实时不得已的行为,我们只是希望获得一个顺序
#18. MX-S4 CSP-S 模拟赛
两佰昏!
赛后看了一下T3,又拿到五十分
交换比特,共同庆祝。
- Title: Contests
- Author: rainbow-auto
- Created at : 2024-08-30 10:59:55
- Updated at : 2024-10-21 09:13:36
- Link: https://rainbow-auto.github.io/2024/08/30/Contests/
- License: This work is licensed under CC BY-NC-SA 4.0.