day2
G
- 首先需要发现对于包含其他区间的大区间来说,要么自己新成立一个区间,最优选择是自己形成一个组,或者分在包含的小区间的那个组内。这步转化还是挺难的啊。。。
- 把大区间先都筛出来。
- 对小区间排序后
,因为小区间两两之间不包含,所以在左端点升序后,右端点也是升序的。
表示前
个区间分为
组,先枚举
再枚举
,可以单调队列优化。
- 最后贪心的添上大区间即可。
- 再次感叹jiangly代码写的真短!
J
- 这题需要Pollard-Rho+快速乘。
- 容易想到从质因子的角度考虑答案。
- 设
是当前考虑的质因子,
是整除
且不整除
的数个数。
- 那么对答案的贡献是
。
- 直接枚举
对答案的贡献会使用多次乘法卡常。
- 需要一个
,考虑定义
是整除
的数个数。
- 那么对答案的贡献是
。使用单次乘法不卡常。
- 教训就是想清楚再写代码,不然总会出现很多错。不利于身心健康。
L
- 根号分治即可。
- 注意没有人步数超过10000,可再次优化。
day3
B
- 转成
个行和
个列共
个点,
表示第
行和第
列之间的边。行和列内部均没有连边。求最小生成树。
- y1s1这个模型挺神。
C
- 如果
那么
这个格子可以当两个格子用。
- 算一下二分图最大匹配。
- 容易分析任意形式的最大匹配都是最优的。
G
- 考虑离线做法,对于询问
,暴力之前所有
的倍数进行修改。
- 将节点
修改为颜色
时,需要将
子树全部插入颜色
。这部分用树状数组套线段树维护。外层树状数组维护
序,内层线段树维护颜色。
- 询问
时,倍增
的祖先,答案节点是
,那么对于颜色区间
,
在该区间内的个数与
相同,且
是距离
最近的祖先。
- 卡常使我痛苦。比赛时如果被卡常,需要快速止损,采用常数最小的方式。
day4
AK
A
- 这题正解不会,因为点数不多,猜测最短递推式不长,考虑用BM整一下。
表示以
为根的子树,学分和为合法的第
小的方案数。如果
是最小合法权值,那么第
小的学分为
。这部分需要带一些偏移量,我觉得挺不好想的。
- 然后就是套一下
。设
其中
的最大值取到
,由于边界的细节问题,那么
只用到
。
- 真难。
B
- 设
表示当前序列最后一个数是
且生成数的过程仍未结束,将要生成的数的个数的期望。
- 设
表示当前序列最后一个数是
且生成数的过程仍未结束,将要生成的数的个数的平方的期望。
- 根据
得下式。
- 倒序求解期望。
即为答案。
C
- 不妨设
。
- 先把长度为
的前缀都设置为相同并去掉。
- 如果
即可构造出答案。
- 证明有点麻烦,可以基于
无解来证明。
D
- 删
条边相当于把树划分为
个连通块。
- 考虑将每个连通块看成一个整体的点,然后对于
个连通块进行连边的方案数
,其中
表示第
个连通块的大小。
表示第
个连通块的度数。
- 考虑
序列,对于
都确定后的贡献,
表示
在
序列中的出现次数。
- 考虑如何计算
,该问题等价于每个连通块选择
个点的方案数。
- 考虑
解决。
- 定义
为
子树有
个连通块且
所在连通块选择了
个点的方案数。
- 因为
,因此复杂度是
。树上背包的复杂度。
- 挺难的,这我是真想不到。
E
- 考虑
,
一遍获得每个点的点权
。
- 然后令每个点权都异或
,每个点的点权变成
。
- 变形得
。其中
包含
个连续的区间。
- 答案是
的区间长度和。
- 求
采用类似于线段树的方法递归求解,原理是低
位是
的区间异或某个数后仍然是一个连续的区间。
- 求
可以采用
树,复杂度是
。或者采用区间排序差分求解,复杂度是
。
F
- 每个操作都会更改边数与点数的和的奇偶性。
- 因此判一下边数与点数的和的奇偶性即可。
G
- 难点在于求解
。
- 把问题转化为将
个不同的小球放入
个不同的盒子且每个盒子至少有
个球的方案数。
- 考虑容斥原理,使用
计算至少有
个盒子小于
个球的方案数。
- 考虑文氏图进行容斥即可。
H
- 快乐推式子。
令。
可以暴力枚举,考虑快速算后者。
暴力预处理即可。
- 有点卡常。
I
- 操作只会更改
的逆序对。
- 因此如果消除了
的逆序对,下一个可能更改的逆序对是
。
- 贪心从前往后扫一遍即可。
J
- 通过整理式子可知答案是序列
长度至少为
的连续子序列的最大平均数加上序列
长度至少为
的连续子序列的最大平均数。
- 二分求解即可。
day5
C
- 容易想到需要独立计算出单个
。
- 容易想到采用调和级数的复杂度计算
。
- 定义
表示
的
的个数,
表示
的
的个数。
- 定义
表示第
个
的位置,
表示第
个
的位置。
- 定义
表示游戏进行完第
球后当前局的状态是平局,且满足
满足要求,需要进行到第
球当前局会结束。判定
是否成立,倒序
计算即可。
- 细节很多,要考虑清楚,实在不行就写个对拍。
E
- 考虑离线枚举
跑
。
- 不能枚举位进行转移,需要推一下
的转移,有点麻烦,不过不难。
G
- 无数种暴力方法,可是我一种也不会。翻了翻别人写的代码,发现一种神奇的搜索。
- 转化一下问题,
取到一部分
,这部分
记作
,然后
取到另一部分
,这部分
记作
,要求
。因此问题转化为求
是
的倍数且
是
的约数的最小的
。
- 考虑用搜索的思路解题,用
记录
的质因子状态,其中第
位是
表示
的幂次是
,第
位是
表示
的幂次小于
。
表示当前状压的状态是
时的最小的
。计算
的复杂度是
,我口胡的复杂度,不会严格证明。
- 只计算
不足以解决问题,因为
和
的状压状态可能存在重复部分,即
。
- 考虑关于位的
。定义
,其中
。这部分复杂度是
。
- 答案为
,其中
。
day6
A
- 好久没写计算几何了,来一手,感觉写着挺有意思,就是debug有点累。细节很多开始没想清楚导致一直改改改。
- 这个题就是分析出每条边消失的时间即可。
- 然后由叉积可知面积是关于时间的二次函数。
- 将询问离线,删除边和回答询问同时进行即可。
- 时间复杂度是
。
- 写起来很累,重生菜狗队写了80行orz。
F
- 很容易想到二分答案然后打出GG。
- 观察到答案至少是最大的
。可以保证每个牛排至多在两个锅内制作。
- 再观察到答案不会超过
。
- 然后按照锅的顺序摆放牛排即可。
G
筛魔改题。
,其中
是约数个数。
- 出题人说这种形式也可以
筛一筛。
- 对于质数来说,
。
就是质数个数。
- 其中
- 根据递推式,
。
- 其中
H
- 将所有矩形对
取模。
- 注意判定矩形的长宽与
的关系。
- 对矩形的左边界和有边界打上差分标记。
- 将列从左往右扫,权值线段树存储当前列的行信息。
- 查询当前列是否存在最小值是
的行。
I
- 设输入的区间覆盖的部分的点集是
,构造的区间集合是
。
- 考虑
有多个未被覆盖的区间。称这些区间为空白区间。
- 设第
个空白区间是
,
的第
个答案区间是
。即构造的每个答案区间都留出一个空白区间。
- 需要向
中加入
这个区间,解决没有空间区间的
。
J
是偶数直接输出即可。
是奇数,将与非割点相连的边都删除,或者将与单个割点相连的所有边都删除。
- 证明后者的正确性。容易发现最优局面是多个偶数个节点的连通块和多个孤立点,这些孤立点都是原图的割点。其中孤立点的个数是奇数个,否则会与
是奇数矛盾。大于
的奇数个孤立点可以转为
个孤立点,接着证明,如果孤立点个数大于
,建立关于孤立点的虚树,容易发现将与叶子节点的孤立点的边都删除即可,因此孤立点个数为
。
- 写代码时只要判定与割点相连的连通块的节点树都是偶数即可。
day7
J
- 考虑
优化暴力。
- 先
次
算出正确的答案。
- 考虑模拟错误
的过程。枚举起点
,定义
表示计算出正确的
路径,定义
表示计算出正确的
路径。
表示
在
到
的最短路径上。
- 考虑
优化上述几个数组,如果
至少存在一个
就可以计算出正确的
。
- 仿佛暴力
过不去,只要整成
就能过了啊!这是一个刻骨铭心的套路啊!
day8
A
D
- 按位考虑即可。
E
- 闰年不可能是质数。
- 输出no。
F
表示
可以到达
。
这一维可以滚动掉。
这两维可以压成一维然后用
优化。
- 暴力都不会,是谁的问题呢?
H
- 首先分析可知
是积性函数,然后拆开
。不过似乎这种题都是积性函数,假如你觉得积性函数能做的话,那它就是积性函数?
- 考虑分析单个质数
。
- 上式最后一步转化用等比数列求和即可。
- 答案是
的第
项。
- 分母表达了线性递推的性质,然后暴力求前面
项,通过分母进行快速递推即可。
J
- 题目规定两人不能移动到同一个点,这种情况可以不考虑。
- 需要发现一个事情,设
之间的路径是
,当两者之一离开路径后,两者之间将不再影响,也就是不再发生博弈。两者分别走能走的最长路,按照要求作差,对答案做出贡献即可。
- 当两人同时沿着路径走了
步后,此时先手可以选择离开这条路径,此时贡献是
。
- 当先手走了
步后,后手走了
步后,此时后手可以选择离开这个路径,此时贡献是
。
- 博弈的本质是,
,即后手可以“制止”之后先手对自身更优的操作。
- 答案就是最大的
。
- 写法参考
,写的简直是艺术品!
K
- 答案的路径肯定是大部分沿窄边走,少部分沿着对角线走。或者大部分沿对角线走,少部分沿着窄边走。
- 暴力枚举少部分个数。
day9
G很诡异,因为节点到根的概率已经乘上去了。如果先乘逆元再乘会有0的问题。如果用前缀积与后缀积预处理也会出错。感觉拿任意两份ac代码出来对拍,都会出来不同的答案。先咕了,这个题是好题,就是数据太弱了,由此出来各种奇葩做法,然后给我整蒙逼了。
C
- 根据
引理,构造如下行列式。
- 不能直接高斯消元计算,考虑化简。
- 每列提出一个
,得到
,其中
。
- 考虑行列式的初等列变换,用靠后的列减去靠前的列,得到
。
- 行列互换,行列式不变。那么
。
- 每列提出一个
。那么
,其中
。
- 因此
即为范德蒙德行列式。
- 考虑卷积快速统计
的个数然后快速幂得到行列式的值。
即为答案。
G
- 很诡异,我现在懒得想了,想了好久了。感觉拿任意两份ac代码出来对拍,都会出来不同的答案。
- 左边是st,右边是逆十字。我都蒙蔽了。
day10
G
- 首先是一个子集反演。
表示集合
的人都被成功命中的概率。
表示成功命中的集合是
的子集的概率。
- 值得一提的是,当
时,
。
- 简单解释下
,左边表示集合
内部的人进行不成功攻击和成功攻击集合
内其他人的概率,右边表示集合
外部的人进行不成功攻击和成功攻击集合
内的人的概率。
- 然后
,卷积计算即可。
- 最后输出的时候要乘个组合数系数,然后问的是存活的人,但是
算的是不存活的人,所以要倒序输出。
- 这题还是妙啊,分析一波在知道子集反演这个科技的情况下能想到这个科技,主要还是
不好算但是
好算。
能避免选中但是是否成功命中的问题,选中一个集合,即使不能成功命中每一个元素,但是成功命中的集合还是选中集合的子集,所以只要选中一个集合就好了,避免了是否能成功命中导致的成功命中个数问题。