#3 2023.10.23
290. 2022 ICPC Shenyang Regional Contest
D
绷。
C
显然有用的区间只有 个,模拟即可。
I
对于 的,发现先手可以抢排名 为 1 和 0 的。
对于 的,是交替拿。
fun fact : 有人平衡树写挂了,+18。我不说是谁 /tx。
L
有用的状态不会太多,直接爆搜。
F
假设 是偶数。
考虑如何做 这个矩形。可以看做要构造几个序列 ,满足 且 。选大的贪心放即可。
A
对于一个区间 ,被选中的概率是 。对于两个不交的区间,贡献相当于 。对于两个完全相等的区间,它的贡献是 。所以手动把区间劈开即可。
fun fact : 会搞出类似 的奇怪区间。正解是特判掉这种情况。有人不想特判,手动把 修成了 。精度爆了没草过去。
E
不是边双,等价于有割边。考虑枚举割边集合 。相当于 把图分成了若干个连通块,分别是 ,每个连通块内可以乱连,再搞定 条边的限制,贡献为 。
缩完点之后背包转移即可。
H
什么板子题。。
建出 PAM,发现 一定在一条链上。更进一步地,设 的最小周期是 ,则 有 的贡献(大概是这样吧。
G
草怎么不会这个题。
考虑一个确定的 。构造一棵树 包含 的所有边和点,并对于每个点 ,额外加上 。答案就是 到 上的最远点的距离。
考虑动态维护 的直径。用线段树维护 dfs 序在 内的直径。把 在 上移动,相当于 dfs 序上的区间加。注意到加一整个区间并不影响直径端点。做完了。
B
牛逼题。首先答案的上界是 。考虑如何取到这个上界。
记 为 的最大的数。在模 意义下, 向 和 连边。这个图有哈密尔顿路,记为 。构造一个新的序列 ,。容易发现 是模 意义下的一个环。
在 的基础上,把模 分成若干个环。具体地可以采取 构造。
然后不断合并环,造出一个 的大环,就做完了。
J
好像会了。
大概就是说一次操作对应一个置换,所以把大矩形的行和列重新排列一下,就会变成很多个小矩形。小矩形拼成了一个大矩形,每个小矩形对应的横坐标是一个连续段,是原排列上的一个环,纵坐标同理。所以一次行操作就是把和这行有交的小矩形分别循环移位。
考虑一行小矩形。如果它们的宽是 1,则列操作对它们没有任何影响,行操作的贡献是每个小矩形的最小正周期的 lcm。然后就可以把这行删了。列同理。
所以剩下的全是长宽都 的小矩形。
然后用题解里的 形操作,可以在不影响其他小矩形的情况下,把当前小矩形变成每个可达状态。可达状态由是否有重复元素决定。若有重复元素,贡献是 。若无重复元素,在不更改奇偶性的情况下,贡献是 。
所以大概的想法是先确定每个小矩形的奇偶性,再进行 操作。长宽都是奇数的一定改不了。长宽有一个是奇数的,就把偶数置换环和 0 连边。长宽都是偶数就把行置换环和列置换环连边。最后的方案数是 。
K
咋是几何。在看了。别急。来了来了。
首先显然选的一定是一个凸包(可能有共线)。
那考虑凸包不是一根棍的情况。预处理出 表示 到 的连线是否完全在多边形内部。枚举凸包最左下的点 ,把 的点拿出来按照极角排序。设 表示当前凸包终点是 的方案数。转移 当且仅当 极角序小于 且 。注意要保证它不是个棍,所以再加一维 0/1。
再考虑凸包是一根棍,那就把极长的棍拿出来就随便做了。
感觉是个签到几何题啊,怎么过的人这么少(?。
M
wtf。
291. cf1253f Cheap Robot
对每个点求出到它最近的充电桩 和 。对于每条边 ,连接 的边。kruskal 重构树即可。
292. cf625e Frog Fights
模拟题。用个堆记录创飞的时间,每次挑最小的即可。
293. cf1286e Fedya the Potter Strikes Back
实际上就是每个前缀的 border。考虑前缀 的 border 的起始位置集合 。发现 是先把 踢掉一些东西,再加一个 。注意到踢掉的东西是 的 fail 链上, 的。开 26 个并查集暴力踢就行了。
294. cf587f Duff is Mad
啥乱题。
考虑一个单次询问 的做法。相当于对 的每个节点,问 的终止结点在它的 fail 树祖先链上出现了几次。离线下来 dfs ,用 的单点加区间查分块可以做到 。
再考虑对于一个串 ,解决关于 的所有询问的 的做法:把 所在的点设为 1, 就是 的子树和。
拼起来就过了。
295. cf896e Welcome home, Chtholly
如果整体做 1 操作,假设是减 ,值域为 。容易得到两种做法。
第一种是按题意模拟,复杂度是 ,可以让值域减少 。
第二种是假装所有数都减了 ,然后把 的东西补回去,相当于平移数轴上的位置。复杂度是 ,可以让值域变成 。
所以当 的时候可以使用第二种,否则用第一种,相当于用 的代价把值域减少了 。
套个分块做完了。
296. cf1801e Gasoline prices
序列上的版本就是维护 个并查集,第 个并查集的第 个点代表 。只会被合并 次,就做完了。上树就是把这个并查集搬到树上,没啥意思。可能需要维护一个反着的并查集。
297. The 2022 ICPC Asia Hong Kong Regional Contest
没打过 jiangly 和 larryzhong /ll。
H
绷。
fun fact : 有人英语不好理解不了题面,瞪了 5min 才结合样例理解这个题在干啥 /cy。
K
先排序和去重,答案一定 。
如果答案等于 ,要求是 。
否则枚举 有没有取模。取模的话是 ,不取模的话,其他数显然不会取模到 ,所以就是把所有 的数变成 之后再取 gcd。
fun fact : 有人开场就写了这个题,然后 +3 /cy。
A
大概就是设 表示 子树的答案。转移就是 。
E
扫描线。枚举 。扫到当前点如果有限制,相当于 掉一个区间的 。
F
数位长显然不会差 。暴力枚举。
L
显然小区间完全吊打大区间。考虑每次扔没被扔的集合里最大的那个。设 表示它能接受的最大长度。然后找一个长度 的最长区间扔了就行了。
B
注意到黑的只有一个连通块,那就只数白的连通块个数。白的有一个大的连通块。对于其他的白连通块,一定不存在右下的锯齿状物。所以枚举作为白连通块右下角的点,贡献就是这行这列不能删它,下一行下一列把它封住的概率。
C
令 。特判掉两个奇数和 的情况。我的做法比较鬼畜,令 ,嗯随 个 的数,构成序列 ,满足 都互不相同。把 塞进每列, 继续嗯随。然后把这些东西复制一遍再每位异或 1。如果 是奇数就再塞一条 00001111。多随几次就过了(。
D
答案相当于 点积 ,所以只有凸包上的点有用。暴力合并凸包,查询的时候三分。现场没人过 /jy。
J
相当于计算 。
注意到里面这个东西等于 。其中 表示 里 位是 1 的个数。所以上面那个 只取决于后面这坨东西的正负性。
然后发现后面这坨东西的正负连续段不会太多(???),大概只有 个,就暴力分治 ,每次找出 区间的后面这坨东西的最小值和最大值,如果正负性相等就直接算。
I
做法满天飞的一个题。似乎这个题的各种解法都依赖于求出若干对关键点,然后扫描线求答案。因为关键点对远大于查询,所以扫描线的时候用分块。
题解的做法是把平面分 次块,第 次分块的边长是 。目标是求出距离在 里的关键点对。加入点的时候暴力扫周围的 3*3 的块更新答案。如果找到了一个 满足 ,就把下标 的点全扬了。这样能保证每个块只有 个点。
还有一种正解的做法也是把平面分 次块,第 次分块的边长是 。然后把每对相邻的块按照下标排序,枚举相邻的 个点,这样也是对的。考虑每个可能优的点对,当它们在同一块或者相邻块的时候,它们两个中间不会有太多点。实际操作可以枚举 10 个点左右。
然后就是经典的乱搞做法:随机一个角度,然后排序,枚举原序列和排序后序列上的点硬草。感觉很伟大!
G
你妈,看了一天没看懂。傻逼。
298. LG9747 「KDOI-06-S」签到题
发现最后的数一定是整个区间的 OR。再发现一个区间合法,当且仅当存在一个数是区间 OR,并且存在一个和这个数不交的区间 OR 起来是 OR。
枚举每个数作为区间的 OR,二分出 L,R 是会让 OR 变化的端点。再二分出 满足 且 。这样的 就是机场区间。然后扫描线即可。
299. arc147d Sets Scores
考虑一个变化序列 。记 是当 在 中,序列变化量是 时, 在 个集合里的出现次数。再枚举 。答案就是 。
300. arc147e Examination
忽略次数限制,判定一个序列能否合法。相当于把 加一, 减一,然后任意后缀和都要 。
先把一定要换的东西拉出来,考虑加进一个 的数,相当于把 这段区间加一。所以从后往前扫,如果遇到前缀和是负数,就挑 最小的区间放。
301. arc147f Again ABC String
考虑把题目抽象成为有三个人在一个长度为 的环上走,分别位于坐标 。每次可以选一个人往前走 1,要求不能有两人重合的方案数。
设 表示三对人分别至少重合 次的方案数。注意到如果 ,则 。原因是当它们第一次重合后,对下一个状态会产生 2 的贡献。
所以只需要计算 。。
以 为例,相当于第一个人的步数减去第二个人的步数在模 意义下为 。答案就是 。每一轮可以让步数差加减 1 或者不变。而如果一个情况里,第一个人和第二个人第一次相遇后,如果一直动第三个人,在答案式子里的贡献就是 1。否则如果动了第一个人和第二个人,假设它们最后距离差为 ,那么有 +d 和 -d 两种方案,贡献为 0。
现在问题变成了如何计算 。注意到 。使用根号分治,如果 不大就暴力转移。否则变成计算 ,枚举 ,计算 ,这个可以简单用数位 dp 求出。
302. gym104369e New but Nostalgic Problem
先建个 trie,对于点 ,计算 的最大集合大小。发现严格小于等 的串可以随便选,大于 的每个 trie 结点至多有 1 个串经过。dfs 就行了。摇奖手速也太快了吧,吓人。
303. gym104369f Traveling in Cells
个线段树一起线段树二分就行了。怎么花老师还写这种题啊。
304. gym104369m Computational Geometry
假装下标是模 意义下的。枚举劈开的两个点 ,如果把一边劈成棍子了肯定不行,否则就是两个区间内两两 dis 的最大值。随便更新。摇奖手速也太快了吧,吓人。
305. gym104369j X Equals Y
先讲讲我的垃圾做法。相当于构造一个序列 ,满足 。
首先搞定 的情况。然后是 ,可以暴力枚举 塞进哈希表里。
然后是 。限制转化为 。先把能让序列长度为 2 的 区间求出来。枚举 ,可以得到 。把 的区间和 的区间取个交,此时条件变成了 。用扩展欧几里得算即可。
似乎题解更高妙。把 范围写出来之后就不用 check 了。我是傻逼。
306. gym104369h Canvas
显然 11 没用。那不妨考虑对于一个点 ,连边 。对于 ,连接 ,否则连接 。然后缩点,每个入度为 0 的块选一个点变成 1 即可。
307. gym104369g Swapping Operation
考虑把会让前缀和后缀 and 变化的点称为关键点!
枚举分界点 k。如果交换的两个点和两边的关键点不交就屁用没有了!那就枚举交换的是哪两个关键点,或者是哪个关键点,最后可以写成 。发现前面两个的个数不多,就暴力枚举!
308. gym104369l Classic Problem
进行一个 B 姓算法的猛日。做完了。
309. cf722f Cyclic Cipher
身败名裂题。
考虑一个区间两两有解就一定有解。区间内两两有解判定是容易的。套个双指针即可。
310. cf513f2 Scaygerboss
二分答案之后建个图,能到的连边,跑个最大匹配即可。
311. cf1119f Niyaz and Small Degrees
身败名裂 。
大概是对于一个 有一个显然的 dp,大概是一个点选儿子里前 个最小的。注意到当 增大,只有 的点会受影响。
312. cf1553I Stairs
怎么这玩意 3400 啊。
显然连续段是极长的。每两个极长的连续段之间有一个 的 。
搞出 集合 ,设 会把数列分割成 ,答案就是 。分治算即可。
313. xsy5264 冬眠
发现每个不合法三角形存在两条 1 边。尝试数每条 1 边一共在多少个三角形里出现过。发现只跟 的奇偶性,1 边两个端点的奇偶性有关。答辩分类讨论题。注意判断一下等边。
314. xsy5265 假期
大力猜想答案是个团。就搞个最大团就行了。
315. xsy5266 刚刚结束
把每个点 XOR HASH,满足每个颜色 XOR 和为 0。发现更改一个点相当于若干子树 XOR。查点容易。
就变成了带时间顺序的矩形 XOR,矩形 XOR 和。注意到修改矩形是 ,查询矩形是 的,所以直接离线 cdq 扫描线。
316. uoj821 【UR #26】石子合并
考虑合并两个序列。把两个序列的非严格前缀最大值拎出来,变成很多很多个区间。发现就相当于这些区间归并,第一关键字是第一个元素的大小,第二关键字是左右。并且合并之后新序列的区间还是这些区间。
所以找出所有区间,对于第一个元素相等的区间有严格的顺序。考虑容斥掉长度的限制,每种区间是个插板,就做完了。
317. uoj823 【UR #26】铁轨回收
困了不想写题解了,可以去看官方题解或者直接咨询 zak 本人或者咨询我。
318. arc146d >=<
转成两个限制,分别是
- 如果 ,则
- 如果 ,则
反向也一样。
然后扔进队列里,所有的限制都满足。
319. arc146e Simple Speed
从小到大 dp 连续段。设 表示前 种数,有 个连续段,左右两边有几 0/1/2 个是 。随便转移。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?