11 月第四周杂题
11 月第四周杂题
- 11 月第四周杂题
- P10063 [SNOI2024] 平方数
- P14401 [JOISC 2016] 电报 / Telegraph - 洛谷
- P3615 [JOISC 2016] 如厕计划 / Toilets - 洛谷
- P14397 [JOISC 2016] 雇佣计划 / Employment - 洛谷
- P4323 [JSOI2016] 独特的树叶 - 洛谷
- P7215 [JOISC 2020] 首都 - 洛谷
- P6891 [JOISC 2020] ビルの飾り付け 4 - 洛谷
- F - Leftmost Ball
- P3769 [CH弱省胡策R2] TATT - 洛谷
- P14396 [JOISC 2016] 棋盘游戏 / Solitaire - 洛谷
P10063 [SNOI2024] 平方数
前置知识:二次剩余。
定义:对于 \(\gcd(a,p)=1\),若存在 \(x^2\equiv a\pmod p\) 则 \(a\) 为模 \(p\) 意义下的二次剩余,否则为二次非剩余。
欧拉判别法:对奇质数 \(p\),\(a\) 是二次剩余当且仅当 \(a^{\frac {p-1}2}\equiv 1 \pmod p\),\(a\) 是二次非剩余当且仅当 \(a^{\frac {p-1} 2} \equiv -1 \pmod p\)。
根据欧拉判别法,模 \(p\) 意义下的二次剩余和二次非剩余各有 \(\frac {p-1} 2\) 个。
乱搞题。考虑一个数 \(N=x^2\) 模 \(p\) 后一定是模 \(p\) 意义下的二次剩余,我们取出 \(60\) 个大质数,要保证所有质数与 \(A_i\) 互质,若 \(A[l\dots r]\) 中对每个质数都有 \(A_i^{\frac {p-1} 2} \equiv -1 \pmod p\) 的数量为偶数(因为两个非二次剩余相乘得一个二次剩余),则我们认为 \(\prod _{i=l}^r A_i\) 是一个平方数。时间为 \(60\times n\times \log P\)。
如果脸黑可能会导致随便选的大质数不满足互质的条件。
P14401 [JOISC 2016] 电报 / Telegraph - 洛谷
首先每个点只保留最大的一条入边。
但这样仍有可能剩下若干个环,对每个环选一个点断掉一条边,对答案的增量就是最大边减去次大边,选增量最小的点修改即可。
P3615 [JOISC 2016] 如厕计划 / Toilets - 洛谷
每个时刻两间厕所都要有人。而我们的策略如下:
- 当队头为女生时,删掉队头两个人。
- 当队头为男生时,删掉队头与第一个女生。
因此每次当队头为男生时,要满足后面至少有一个女生。将男生看做 \(1\),女生看做 \(-1\),则充要就是每个后缀都要满足后缀和 \(\le 1\),且总和要 \(\le 0\)(当后缀和等于 \(1\) 时队头一定为男生,队头的前一个人一定为女生,此时队头的男生会与它前面的女生一起删掉,变成后缀和等于 \(0\) 的情况)。
对于后缀和大于 \(1\) 的位置,固定这个位置,我们要把后面的男生往前移动,这样这个位置减掉的后缀和就等于移动形成的区间的覆盖次数,而又因为每个位置的答案就等于覆盖次数,因此最大后缀和减一即为答案。
P14397 [JOISC 2016] 雇佣计划 / Employment - 洛谷
题意:给点一个序列,求 \(\ge A_i\) 的连续段数量,有单点修改。
考虑到连续段数量与断点有关,于是连续段数量就等于 \(<A_i\) 的点数加一、再减去相邻两点都 \(< A_i\) 的组数。
相邻两点都 \(<A_i\) 可以刻画成 \(a_j<A_i\land a_j>a_{j+1}\) 或 \(a_j<A_i\land a_j\ge a_{j-1}\)。
以值为下标用树状数组维护即可,每次修改时要修三个点,复杂度 \(O(n\log n)\)。
P4323 [JSOI2016] 独特的树叶 - 洛谷
树哈希模板题,考虑以下哈希是可以做换根的:
其中 \(f\) 是一个映射,可以使用 xor-shift。
至于无根树的同构就是把所有点都当做根求出哈希值,如果有一个哈希值相等那么就是同构。
P7215 [JOISC 2020] 首都 - 洛谷
做法 1
选出一种颜色的限制相当于,把使得颜色的点连通的极小连通块找出来,那么连通块内其他颜色都要被选,考虑限制之间连边,可以树剖后线段树优化建图。
答案就是最小的强连通分量。复杂度 \(O(n\log^2n)\)。
做法 2
考虑点分治。点分治不仅能处理跨过分治重心的路径,还能处理跨过分治重心的连通块。
维护一个当前选出的颜色队列,先把分治重心加入队列,每次把队头颜色的点拿出来,那么到分治重心路径上所有新的颜色都要加入队列,打标记跳父亲即可。注意如果一个选出的颜色中有点在当前分治连通块外那么就是不合法的。复杂度 \(O(n\log n)\)。
P6891 [JOISC 2020] ビルの飾り付け 4 - 洛谷
不妨令 \(a_i>b_i\),再多记一个 \(c_i=0/1\) 表示 A 取 \(a_i\) 还是 \(b_i\) 即可。
首先可以确定一些必选的位置:
- 若 \(b_i>a_{i+1}\),则无解。
- 若 \(a_i>a_{i+1}\),则 \(i\) 必选 \(b_i\)。
- 若 \(b_i>b_{i+1}\),则 \(i+1\) 必选 \(a_{i+1}\)。
正反各扫一遍即可确定所有必选的位置。
现在剩下的相邻都没有必选的位置形如只有两种情况:
- \(a_i\le b_{i+1}\)。
- \(a_i> b_i\)。
按照 \(a_i\le b_{i+1}\) 的位置将没有必选的连续段再分段,则每一段在最终方案里形如存在一个分界线,使得分界线之前取 \(b_i\),分界线之后取 \(a_i\)。
考虑到分界线往后挪一位时,这一段 A 的数量会 \(\pm 1\),因此这一段 A 的数量可以取在一个区间 \([l,r]\),其中 \(l\) 是可以取到的最小值,\(r\) 是可以取到的最大值。
之后就容易做了,合法条件是 \(n\in [C+\sum l,C+\sum r]\),其中 \(C\) 是一开始确定的必选位置中取到 A 的数量。构造也是容易的。
复杂度 \(O(n)\)。
F - Leftmost Ball
考虑直接对最终序列计数。显然充要就是第 \(i\) 种新出现的颜色前面至少有 \(i\) 个 0。
我们只关心每种颜色第一次出现的位置,设 DP \(f_{i,j}\) 表示已经插入了 \(i\) 个 0,\(j\) 种颜色的方案数(\(i\ge j\))。
转移分两种:
- 插入一个 0 在当前第一个空位处。
- 插入一个新的颜色在当前第一个空位处,同颜色的其他的球就可以在剩下空位里任选。
复杂度 \(O(n^2)\)。
P3769 [CH弱省胡策R2] TATT - 洛谷
四维偏序板子题。可以 CDQ 套 CDQ。
考虑三维偏序的 CDQ 实际上是对于每个分治区间,将左半边变成 \((0,x,y)\),右半边变成 \((1,x,y)\),然后做二维偏序上 \(0\to 1\) 的贡献。
四维偏序是类似的,首先第一层 CDQ,把左半边变成 \((0,x,y,z)\),右半边变成 \((1,x,y,z)\),然后从当前分治区间递归第二层 CDQ。第二层 CDQ 里把左半边变成 \((*,0,y,z)\),右半边变成 \((*,1,y,z)\),然后做 \((0,0)\to (1,1)\) 的二维偏序即可。
每个点会做 \(O(\log ^2n)\) 层,带上树状数组插入和查询,于是复杂度就是 \(O(n\log^3 n)\),空间 \(O(n)\)。
实现细节上,用 stable_sort 排序防止乱序。同时由于我的写法是在原序列上直接排序,所以做完当前分治区间然后递归右半边前,要把区间重新排好序。
P14396 [JOISC 2016] 棋盘游戏 / Solitaire - 洛谷
首先有解的充要就是第一行和第三行不存在连续的 xx,且四个角必须为 o。
考虑到第一行和第三行的 x 变成 o 是没有限制的,有限制的是第二行,且这个限制和相邻两个 x 填入的时刻的大小关系有关。
不妨先按第二行连续的 x 分段,每段的方案是独立的,最后用多重组合数合并方案即可。
考虑每段的方案数,由于与相邻的大小关系有关,且我们是对满足条件的排列计数,可以把排名计进状态里顺序 DP。
设 \(f_{i,j,0/1}\) 表示考虑完前 \(i\) 列,第 \(i\) 列的第二行的 x 填入的时间在前 \(i\) 列所有 x 中排名为 \(j\),且指定第 \(i+1\) 列的第二行填入时间 \(t_{i+1}\) 是 \(t_{i+1}<t_i\) 还是 \(t_{i+1}>t_i\)。
转移时要考虑第一行与第三行的 x 的填入时间,当满足 \(t_{i-1}<t_{i}\) 且 \(t_{i}>t_{i+1}\) 时,第一行和第三行没有限制;否则要限制第一行与第三行的填入时间在第二行之前。
转移可以用前缀和后缀和优化,复杂度 \(O(n^2)\)。

浙公网安备 33010602011771号