鲜花
所有题目来源:search pku in qoj
参考文章:
-
DaiRuiChen's blog:PKUSC2024,云浅's blog:THUSC/PKUSC 2024
-
cyfff's blog:PKUWC2024,realskc's blog:PKUWC2024 Day1,PKUWC2024 Day2
-
ix35's blog:PKUSC2023,aleph1022's blog:PKUSC 2023 D1T3,max67's blog:PKUSC2023
pkusc 2024 Day1
T1 (回文路径)
原中原:P4324
给定 \(2\times n\) 网格,每个格子上有一个字符,考虑一条只能向下和向右走的路径,如果路径上每个字符连成的字符串是回文串,称这条路径是好的,求最长好路径。
\(1\le n\le 10^5\)
$\texttt{solution}$
枚举回文中心在啥位置,不妨设在第一行。二分出在第一行能走到的最长距离(容易证明这样贪心是对的),然后往下走,再二分在第二行能移动到最长距离。
判断回文用哈希即可,复杂度 \(O(n)\)。
\(\texttt{record}\)
T2 (正方形计数)
给定凸 \(n\) 边形 \((x_1,y_1)\sim(x_n,y_n)\),求有多少正方形(可以是斜正方形)在该多边形内。
\(1\le n\le 8,1\le x_i,y_i\le 2000\)。
$\texttt{solution}$
考虑枚举正方形的一条边向量 \((\Delta x,\Delta y)\),然后对起点坐标有若干限制,可以写成半平面交的形式。
相当于数某个多边形内部整点数,可以拆成对 \(\mathcal O(n)\) 条线段下方的区域内数点个数,类欧几里得算法解决。
时间复杂度 \(\mathcal O(nV^2\log V)\)。
但是本题小常 \(V^3\) 能过,于是有如下做法:
直接记录凸包当 \(x=t\) 时包含的整点区间 \(l_t,r_t\)。
然后同样枚举正方形的一条边向量 \((\Delta x,\Delta y)\),然后枚举起点 \(x\) 坐标,此时起点 \(y\) 坐标限制显然是一个区间,通过 \(l,r\) 算出即可。
上下界实现精细一点就能通过。
\(\texttt{record}\)
T3 (独立)
弱化版:P8352。
给定 \(n\) 个点的树,每个点点权在 \([1,m]\) 中随机,求所有方案下树上最大权独立集的和。
数据范围:\(1\le n\le 2000,1\le m\le 10^{8}\)。
pkusc 2024 Day2
T1 (分流器)
在一张 \(n+1\) 个点的有向图上,\(1\sim n\) 出度都为 \(2\),且边 \(i\to j\) 满足 \(i<j\)。称每个点的两条出边为左右手。在这个图上做一个投球游戏,多次在 \(1\) 放球,每次球从 \(x\) 的左手滚下,然后交换 \(x\) 的左右手。
求最小周期,即最少放球个数使得左右手状态和初始状态一致。
\(1\le n\le 5\times 10^4\)。
$\texttt{solution}$
考虑维护 \(1\sim i\) 的最小周期,并且求出此时每个点被经过的次数 \(f_{i}\)。
可以据此计算出 \(f_{i+1}=\sum\limits_{i+1\in \mathrm{out}(u)} \dfrac{f_u}2\),如果 \(2\nmid f_{i+1}\) 那么最小周期要翻倍,每个 \(f_i\) 也 \(\times 2\)。
一个较好的实现是令 \(f_{1}=2^n\),令 \(k=\min\limits_{i=1}^n \mathrm{lowbit}(f_i)\),答案就是 \(2^{n-k+1}\),压位高精度维护。
时间复杂度 \(\mathcal O\left(\dfrac {n^2}{\omega}\right)\)。—— $\texttt{solution by Dairuichen}$
\(\texttt{record}\)
T2 (排队)
给定 \(n\) 个区间 \([l_i,r_i]\),定义 \(f_i(x)=x+[l_i\le x\le r_i]\),\(q\) 次询问 \(L,R\),求 \(f_R(f_{R-1}(\cdots f_{L}(0)))\)。
\(1\le n,q\le 10^6\)。
$\texttt{solution}$
扫描线,设当前扫描到 \(R\),\(x_L=f_R(f_{R-1}(\cdots f_{L}(0)))\),容易发现 \(x_L\) 单调不增。
线段树维护所有 \(x_i\),二分出 \(x_L\in[l_i,r_i]\) 的 \(L\) 区间,区间加即可。复杂度一只 $\log$。
\(\texttt{record}\)
T3 (最短路径)
给定纯随机的 \(n\) 个点 \(m\) 条边的带权有向图,\(q\) 次随机询问某对点 \(S\to T\) 的最短路。
\(1\le n\le 2\times 10^5,1\le m\le 3\times 10^6,1\le q\le 10^4\)。
pkuwc 2024 Day1
T1 (Caught in the Middle)
给定一个长度为 \(n\) 的仅包含
L
,R
的字符串 \(s\),Alice,Bob 博弈,Alice 先手。每次操作时,假定当前剩余字符串为 $s$。如果 $s$ 为空串,则此时操作者输掉游戏。否则操作者可以选择整数 $i\in [1,|s|]$。
如果 \(s_i = \texttt{'L'}\),则操作后剩余字符串为 \(s_{1}s_{2}\cdots s_{i-1}\);如果 \(s_i = \texttt{'R'}\),则操作后剩余字符串为 \(s_{i+1}s_{i+2}\cdots s_{|s|}\)。
求在最优情况下谁会获胜。
$\texttt{solution}$
把
R
,L
分别看成左/右括号,发现答案是括号序列能否匹配。证明就考虑一个括号序列任意操作一次后,把和其匹配的另一个括号也操作一下就仍然是括号序列。
而不是括号序列时操作从左到右第一个有多余
L
的那个L
就一定能操作成括号序列。如果没有多余的
L
,则一定能找到一个R
使得操作其合法。
\(\texttt{record}\)
T2 (最小值之和)
T3 (堆操作练习题2)
pkuwc 2024 Day2
T1 (圆)
记 \(\text{round}(x)\) 表示 \(x\) 的四舍五入。给定 \(n\) 个恰好一位的小数,构成了可重集 \(S\)。你可以进行两个操作:
取出 \(x\in S\),放入 \(\text{round}(x)\)。
取出不同的 \(x,y\in S\),放入 \(x+y\)。
你要使最终集合 \(S\) 中只剩一个数,并最大化这个数。
\(1\le n\le 10^6,a_i\in [0,10)\),保证 \(a_i\) 都只有一位小数。
$\texttt{solution}$
十分位 \(\ge 5\) 的直接四舍五入,\(=0\) 的不影响答案。接下来贪心地做匹配:
优先匹配 \(4,1\),然后把所有 \(4\) 变成 \(3\)(容易证明这不影响答案)
再依次做 \(3+2,3+1+1,3+3\) 的匹配,然后把所有 \(3\) 变成 \(2\)(容易证明这不影响答案)
最后匹配 \(2+2+1,2+1+1+1,2+2+2,1+1+1+1+1\),就求完了答案。复杂度线性。
\(\texttt{record}\)
T2 (排序)
T3 (栈)
pkusc 2023 Day1
T1 (Border)
给定长度相同的非空字符串 \(S,T\),对于任意 \(1 \le i \le |S|\),进行如下询问:
- 假设将 \(S\) 的第 \(i\) 个字符替换为 \(T\) 的第 \(i\) 个字符,形成的新字符串 \(S'\) 的最长的 \(\text{border}\) 是多少。如果不存在 \(\text{border}\),则返回 \(0\)。
询问互相独立。\(1\le n\le 2\times 10^6\),字符集为小写英文字母。
$\texttt{solution}$
特判掉 \(S_i=T_i\) 的位,答案就是原串的最大 \(\text{border}\)。
首先如果原串的某个 \(\text{border}\) 在其不包含某一位,则直接贡献上去。
否则枚举 \(\text{border}\) 长度,二分哈希出第一个不同的位,修改成前缀或后缀的对应位值分别贡献上去。
所有过程均可用哈希实现。复杂度 \(O(|S|\log |S|)\)。
\(\texttt{record}\)