区域赛补题记录
近两年区域赛/网络赛
\(比赛\) | \(A\) | \(B\) | \(C\) | \(D\) | \(E\) | \(F\) | \(G\) | \(H\) | \(I\) | \(J\) | \(K\) | \(L\) | \(M\) |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
\(2019icpc银川\) | \(\checkmark\) | ||||||||||||
\(2021ccpc广州\) | \(\checkmark\) | ||||||||||||
\(2022icpc南京\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | ||||||
\(2022icpc合肥\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | ||||
\(2022ccpc威海\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | |||
\(2022ccpc桂林\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | |||
\(2022ecfinal\) | |||||||||||||
\(2023ccpc网络赛\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | |
\(2023icpc网络赛1\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | ||||||||
\(2023icpc网络赛2\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | ||||||||
\(2023icpc-ecfinal\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) |
2019icpc银川
C
2021ccpc广州
C
二分答案之后随便选一个开头断环成链。方案变成
2022ccpc威海
A
答案就是冠军选手个数和能组的队的个数的min。
B
因为最后的结果不大于1e9,所以不小于2的数不超过log个,把操作看成合并相邻两个连通块。如果合并的时候有一边是1,那么很容易算出前后的差是-1,特判掉这种情况之后有效的合并不超过log次。如果已知一个集合的大小,和是x,积是y以及1的个数,那么这个集合的可能性便不是太多,可以爆搜存下来。然后在有效合并上dp,对于当前层和对应的状态,到下一层的本质是把一个数拆成两个数,两者之积和两者之和的差值是给定值,这个可以暴力枚举集合中的每个数,题解里说这个不超过根号1e9不是很懂。但是应该能跑。
C
只要找到5个不共线的点即可。
证明是分类讨论贡献的情况。
D
状压板子,主要恶心的点在多边形棋盘的实现。
E
模拟即可
F
考虑一条路径,发现代价是(每个极长颜色连续段的权值和+下一个点的权值)的max。对这个代价重新连边。这样就变成了要求一个有向的瓶颈路。考虑类似dij的过程,每次扩展瓶颈最小的点,正确性显然,因为不存在之后被其他点更新的可能。
G
考虑 \(kx\) xor \(x\) 相对于x的变化值不超过2x,所以实际上只要有最前面2x个值,其他的所有值只是循环。
I
二分答案,需要观察到一定存在一个最优解,最大的龙被分给了最重的任务。那么用优先队列维护任务即可。不懂题解用的啥做法,反正这个做法应该是 \(O(Tnk\log n \log C)\)的
J
可以发现其实就是算可执行的步数。
K
首先意识到一个连续区间的子集和的可行域一定是一段区间,列出l和r,和k,x的关系式可以得到条件1等价于l小于某值,r大于某值,条件2相当于l小于某值,r大于某值内无解。这两者放到LoR上都是无限高矩形。对条件1求交,在条件2的并上询问矩形和折线包围的面积。
2022ccpc桂林
A
把不在lily旁边的位置放上猫粮即可。
B
考虑一个极小的满足要求的集合,其至少贡献了一个限制,否则可以删除不影响答案。有了这条之后直接状压每条限制是否满足转移就是无 环和自环 的。
暴力做是 \(O(nm2^{3m})\) 的,无法通过。考虑优化,发现暴力转移中我们每次都是枚举状态集合和将要使用的测试点,然后 \(O(m)\) check。但是一个状态和一个测试点的关系只和分离开的一个个程序的测试结果有关,并不和整体有关,那么对每个程序枚举是否满足状态/时空限制,每个程序枚举完后就知道了当前测试点对这个程序的贡献(相当于枚举一个算一个,而不是暴力中的枚举完状态一起算,这样会少一个m)。
C
考虑执行完一次2操作之后ans会变成一个可预知的值,操作1是ans乘2后再加上一个可预知的值,枚举最后一次操作2的位置后后面的部分是线性变换可以维护矩阵。
D
感觉场上想不出来这种东西qaq。
一个重要观察:
那么令抽 \(i\) 次的 \(x^{k}\) 之和的生成函数是 \(F_{i}(x)\),就有:
可得
其中 \(\times\) 是卷积。
如果能解决 \(F_{1}(x)\),那么就能快速幂求出 \(F_{n}(x)\),第m项就是答案。
设 \(i=1\) 时F的系数是 \(f_{k},q=1-p\)。
可以先把(1-q)扔掉。
接下来的推导封闭形式部分官解写的很好懂,就直接复制官解了。
E
考虑用叉积算面积。发现面积表达式是一个很像exgcd的式子。
G
画图看一下可以知道两条路径最多交于一点。
讨论两条路径有无交点,如果无则变成了林克卡特树的mini版,当然实际上不需要写这个dp,只要枚举断边两边维护带权直径即可。如果有则枚举交点,就变成了求子树内前四大以根为端点的链和子树外最大以父亲为端点的链。
J
还是先从必要条件入手,把图建出来。固定值的存在会导致每个未确定的值有一个基本的取值范围。把每个位置的取值范围求出来之后,先不考虑位置与位置的先后顺序,就变成了典题:每个左部点匹配一个右部点的区间,问最大匹配。做法是枚举右部点,把它分配给l在其左边的r最小的区间。正确性基于贪心。然后考虑限制,发现一定满足限制。因为 \(l<l',r<r'\)。
K
一个自然的想法是让异或和尽量小。基于m和n的奇偶性构造,发现在大多数情况下,先摆很多1/2,直至n=3后构造 \(\frac{k}{2},\frac{k}{2}-lowbit(\frac{k}{2}),lowbit(\frac{k}{2})\)是一种可行的构造,对不能构造的少数情况单独讨论即可,具体请参考官解。
2022icpc西安
B
网络流模型是一眼丁真的,主要在于证明。
官解用了调整法,但感觉细节上有点问题,修改一下我认为有问题的部分:
按照官解调整完之后可以发现,是不可能出现偶环的,因为这样就会有两条u边/v边。所以只有在若干次“增广”后不存在冲突边的情况,因为每个点只“增广”一次,所以一定能在有限步内结束调整。
2022icpc南京
E
一个显然的发现是depth不同的点之间不会互相影响,那么可以按depth划分所有的点。
然后场上没看出来的是,对于所有的层,其实只用考虑每一层的点和根形成的虚树。因为一条虚树上的边压缩的所有点覆盖的范围是一样的,代价也和点本身无关,只和点在原树上的深度有关。然后在虚树上dp即可。
J
发现两个点之间有边当且仅当至少有 \(i-a_{i}=j-a_{j}\) 和 \(i+a_{i}=j+a_{j}\) 中的一个。那么对一个数,在其对应的 \(i-a_{i}\) 和 \(i+a_{i}\) 之间连边。这样会形成一张二分图,问题变成将其边集划分为 \(n/2\) 条长度为2的链。
对于每一个连通块,如果边数是奇数则无解,否则跑一棵dfs树,在dfs树上从根到叶子考虑,对当前点连接的除开连向父亲的所有边,如果是偶数则直接互相匹配,如果是奇数则把连向父亲的边加入匹配。考虑这样做只会在根的位置失败,然而如果失败则能导出连通块边数是奇数。
2022icpc合肥
E
题意写的看不懂。
其实就是求最短路之后做一个01背包即可。
K
对感染和隔离的状态开线段树维护,发现操作是区间赋1/0,查询区间最大1连续段,查询区间和,很容易用线段树维护。
I
45度这个限制不好做,但是如果没有这个限制就有一个不难想到的带 \(\mu\) 的式子。先考虑题目答案 \(ans\) 和忽略这个限制的所有直线个数 \(x\) 有什么关系。发现通过关于 \(y=x\) 对称,可以构建一个<45的直线到>45的直线的双射,这意味着两个集合的大小相同。等于45的直线非常好求,就是 \(4n-6\)。那么 \(ans=\frac{x+4n-6}{2}\)。
再考虑 \(x\) 怎么求,也就是提到的带 \(\mu\) 的式子,显然的想法是枚举相邻两个点的坐标之差,但是可能有负数,不太好处理。那么用和上面同样的技巧,发现用正方形的中轴对称可以构造k<0到k>0的双射。那么只需要数k>0的直线数。
一条直线可能经过多个点,尝试用 \(\binom{n^{2}}{2}\) 计数时会发现会被重复计。这种技术的经典想法之一是强制在第一次出现的位置计数。更具体地,我们希望枚举每条直线的第一个点和第二个点,在此处++ans(直线上的点从左下到右上编号)。那么枚举第2个点(i,j)和第1个点与第2个点的坐标差(dx,dy),因为这两个点在直线上相邻,所以 \(gcd(dx,dy)=1\),(否则中间有整点);因为这两个点都在正方形内,所以 \(dx\leq i-1,dy\leq j-1\);因为 \((i-dx,j-dy)\) 是直线上的第一个点,所以第2个点关于第1个点的对称点在正方形外,即在满足前两条的答案中挖去 \(i-2dx\geq 1\) 且 \(j-2dy\geq 1\)的部分。
写成式子之后推导即可。
这个式子单独拿出来研究:
拆一下贡献之后发现只要预处理 \(\sum \mu(i),\sum \mu(i)\times i,\sum \mu(i)\times i^{2}\) 的前缀和,就可以整除分块 \(O(\sqrt{n})\) 回答单次询问。
2022ecfinal
2023ccpc网络赛
A
典题,考虑一个合法的划分方案的权值是 \(n^{2}\),那么等价于枚举 2 个区间,求包含这两个区间的划分方案数(选择的两个区间可以相同)。发现不需要显式枚举,只要设 \(f_{i,0/1/2}\) 表示 \(i\) 后缀,选了 \(0/1/2\) 的方案数。
题解的做法更一般化,定义 \(f_{i,j}\) 表示后 \(i\) 个,所有方案的 \(\binom{n}{j}\) 之和。有转移:
转移可以前缀和优化。因为 \(n^{2}=2\binom{n}{2}+\binom{n}{1}\),所以答案就是 \(2f_{1,2}+f_{1,1}\)。
B
对于一个可行解,从外向内dis是递减的,所以把所有成对的点按dis递减排序,就有一个显然的平方dp。
然后发现dfs序重标号以后,能转移的坐标对是一个矩形,变成单点加矩形最小值,线段树套线段树即可。
C
场上果断扔了,这种题没别的就是要多想,可是我没这脑子呜呜。
按照度数从小到大排序重标号之后,枚举团中最小的点,向右的边数不超过 \(\sqrt{2m}\) ,因为右边点的度数一定大于当前点的度数,总度数就会超过 \(2m\) 。对每个点折半搜索做补图独立集即可。
最劣复杂度取在边集中在一些点上的时候:
D
场切了。二分答案,发现只能动一个向量,对另外的全部预处理向量和,于是要求的就是可行的系数集合,使得 预处理的和向量 和 可伸缩的当前向量 的和 的模长不大于二分值。发现可行系数集合是个区间,求 \(n\) 个区间交是否为空即可。
E
签到题,发现只有 \(2^{n}\) 种可能,枚举即可。
F
一个显然的想法是维护按 \(x\) 有序和 \(y\) 有序的点集,但是空间不够。考虑一个另类的回答方式:考虑每个物品对询问的贡献,考虑价值最大的物品,把平方种询问放在平面上看待,它会成为除开一行一列之外的所有询问的答案。再考虑后面的,如果不对任何询问贡献,那么不用保存它,否则会让一行一列变成一行/一列/两个格子,这些状态又会转移向一个格子/空。可以发现在只加元素的情况下,我们可以只保留对答案有贡献的物品,显然不超过4个。新加元素时排序然后跑一遍上面的判断即可。
G
题目要求相当于给每种字母赋一个不同的数字。首先可以把每种数字的权值算出来,发现通过微调,可以使数字变化 \(val_{i}-val_{j}\) 或 \(val_{i}\)(如果字母个数小于 \(m\))。对所有的这些变化量和一个初始解取gcd即可。注意特判 \(m=2\) ,因为数字不能有前导0。
H
重要的发现是如果 \(dis(i,j) > 2\) ,那么 \(deg_{i}+deg_{j}\geq n-1\),那么较大的 \(deg \geq \frac{n-1}{2}\) 。 那么只跑 \(deg \geq \frac{n-1}{2}\) 的点的补图最短路就可以统计出这部分的贡献。\(dis(i,j) \leq 2\) 的部分只要判断有没有直接连接的边即可。
补图最短路的做法是维护还未得到dis的集合S,从初始点bfs,每入队一个点就查S中的集合在原图上是否有边,无边则得到了这个点的dis,将其入队,有边则这种情况次数不超过线性。
I
先考虑对于一天怎么求。贪心,回复大于损耗的怪一定会打,而且是按照损耗值的顺序打。回复小于损耗的怪则一定会按照回复值从大到小打。后一条的简单推导如下:
\(a_{i}\) 是损耗值,\(b_{i}\) 是回复值,显然如果交换相邻两个元素使得最小值变大,那么会交换。所以在进行完所有的调整之后对于任意两个元素满足交换不优。
那么,打怪的顺序就确定下来了,按序枚举判断所有可能的最小值即可。
接下来考虑,在天数增加的过程中,打怪顺序变化当且仅当:
- 某个怪的损耗和回复相等
- 某两个怪的损耗相等
- 某两个怪的回复相等
由于每个值都是线性函数,那么两个元素的相对关系只在交点处变化一次,所以打怪顺序只变化平方次。
考虑对于一段打怪顺序不变的天数区间,要求的值就是 \(n\) 条直线的最大值,维护凸包/李超树即可。
J
场上没想到还有2+2的情况,只想到了3+1的。
考虑最优解只有两种情况:一个平面有3个点,另一个有一个点;以及两个平面都有两个点。
L
按 \(b\) 排序后设 \(w(k,x)\) 表示在 \([1,x]\) 里选 \(k\) 个的最小代价,第 \(x\) 个必选。单个值可以主席树上询问。
重要的发现:如果 \(w(k,x)\geq w(k,y)\),那么 \(w(k',x)\geq w(k',y)\)。因为 \(y\) 中新选的点的权值不会比 \(x\) 中的大。那么设 \(f(k)\) 为 \(k\) 时的最优决策位置,那么具有单调性,经典分治dp即可。
2023icpc网络赛1
B
对于T串,可以求出对于所有的前后缀在S上的endpos集合。那么就是求两个子树的交。因为endpos其实相当于挂在parent树上的一个节点上,所以对每个endpos,把(在正串的parent树上对应的结点,在反串的parent树上对应的结点)插到二维平面上,查询就是二维数点。复杂度 \(O(\sum |T| \log)\)。
C
虽然感觉场上必写不出来但是还是口胡一下。
用线段树分治把修改直线这个操作删掉,发现可以用类似于标记永久化的方式回答询问,也就是对于一个询问,在对应叶子到根的路径上查询即可。线段树分治中每个节点再开一颗线段树维护凸包,pushup时可以二路归并凸包。这样写是3log的,但是如果对询问按x从小到大排序,同时对每个凸包维护当前最优位置,那么这个量是单调不降的,可以做到2log。
F
这题主要是看的题解,一些定义也沿用了题解。题解链接;
重要的观察是发现对于一个任意的三元组(0,x,x+y),先手都可以使他变成(x,x,y),而后手的所有后继状态也都在先手的后继状态集合里,后手本身也在先手的后继状态集合里,这导出先手必胜。所以只用讨论(0,0,x)的情况。最终会得到只与两数之差二进制末尾0个数有关,把数从低位到高位插入trie即可。这里trie和常规的01trie是反的。
G
启发式合并即可。每次暴力遍历出边check即可,因为启发式合并每个点不会被合超过log次。
H
对于一个固定的周期,满足的一定是一个前缀[1,x]。
怎么快速check \(S_{i}\) 是否有周期k?hash。
(k,l,r)问题变成寻找[l,r]中数值最小的数,满足以他为周期的前缀值至少为x。
排序之后单点插入区间查询即可。
2023icpc网络赛2
A
口胡的,不保真。
考虑构造一个多项式点值是要求值。那么构造
正确性显然的。
问题变成了如何构造一个数。
贪心的策略是每次把当前位
C
把选/不选看成0/1之后就是2-sat板题。
K
复习一下exgcd。
直接贴别人的博客了,感谢知乎和知乎用户轩尘熙。
L
主要的问题在于证明每次贪心找一个最小的半径直接扩展是正确的。证明思路是证明最外面的位置如果不能扩展那么里面的位置一定不能扩展。