趣题记录(被鸽了)
趣题记录
为啥是趣题记录?
之前试过很多次按时间顺序编年体的做题记录,但是都因为在机房做题不方便更新、有些题没有什么意义等原因导致越攒越多,最后就咕掉了,因此决定试一试只记录有趣的题。
记录
CF55C Pie or die (CF \(\color{#aa00aa}{1900}\))
\(n\times m\) 棋盘上有 \(k\) 个棋子,每回合 Alice 选择一个棋子并移到相邻的格子(四连通)或者移出棋盘(如果在边界),然后 Bob 在棋盘上(包括边界)添加一个挡板。如果 Alice 可以将至少一个棋子移出棋盘则获胜,请求出能否获胜。
\(1\le n,m,k\le 100\)。
题解
Alice 向棋盘一边移动一枚棋子,可能从两个角落移出,因此 Bob 会填补两个角落的四个出口,直到棋子到达边界。到达边界后,Bob 填补对应的出口,Alice 沿着边界移动,如果有一个出口未被填补则可以获胜。
容易发现 Bob 需要多执行四次操作,因此 Alice 获胜的充要条件为:至少存在一枚棋子,到达边界的距离不超过 \(4\)。
CF1060C Maximum Subrectangle (CF \(\color{#0000ff}{1600}\))
给定 \(a_{1,2,\cdots,n}\)、\(b_{1,2,\cdots,m}\) 和 \(x\),定义 \(c_{i,j}=a_ib_j\),求 \(c\) 的最大子矩形面积,使得其中元素和不超过 \(x\)。
\(1\le n,m,a_i,b_i\le 2\times 10^3\),\(1\le x\le 2\times 10^9\)。
题解
由乘法对加法的分配律知 \(\sum\limits_{i=l_1}^{r_1}\sum\limits_{j=l_2}^{r_2}a_ib_j=\left(\sum\limits_{i=l_1}^{r_1}a_i\right)\left(\sum\limits_{j=l_2}^{r_2}b_j\right)\),前缀和维护之。
P8511 [Ynoi Easy Round 2021] TEST_68
给定一棵 \(n\) 个节点的有根树,根节点为 \(1\),第 \(i\) 个点有点权 \(a_i\)。对于每个 \(x\in[1,n]\),求出在以 \(x\) 为根的子树外选两个点 \(u,v\) 的 \(a_u\oplus a_v\) 的最大值。
\(1\le n\le 5\times 10^5\),\(0\le a_i\le 10^{18}\)。
题解
在全局求出最大异或和,设为 \(k=a_u\oplus a_v\),则所有不在 \(u,v\) 子树内的点的答案均为 \(k\)。因此我们只需要统计 \(1\) 到 \(u,v\) 的两条链上节点的答案。
从链顶向链底搜,求出当前节点答案后,将当前节点以及当前节点的不在链上的儿子的子树插入 01-Trie 树中,动态维护最大异或和以及产生最大异或和的一对节点即可。
CF1707E Replace (CF \(\color{#000000}{3}\color{#ff0000}{500}\))
给定一个长度和值域均为 \(n\) 的数列 \(a\),定义 \(f((l,r))=(\min\limits_{i=l}^ra_i,\max\limits_{i=l}^ra_i)\)。共 \(q\) 次询问,每次给定 \((l,r)\),求至少用 \(f\) 迭代多少次使其变为 \((1,n)\),或判定无解。
\(1\le n,q\le 10^5\)。
题解
神题。
想到倍增,但是 \(\Theta(n^2)\) 个区间显然没法记录。
\(f\) 函数有个很好的性质:若区间 \(I_1\cap I_2\ne\varnothing\),则 \(f(I_1\cup I_2)=f(I_1)\cup f(I_2)\)。感觉整道 *3500 题的难点就在这里。
如果想到这一性质,就可以通过类似 ST 表的方法,只记录长度 \(2^k\) 的区间的倍增数组然后合并即可。
CF468C Hack it! (CF \(\color{#ff0000}{2500}\))
定义 \(f(x)\) 为 \(x\) 的各数位之和,给定 \(a\),构造一组 \((l,r)\) 使得 \(\sum\limits_{i=l}^rf(i)\equiv 0\pmod{a}\)。
\(1\le a\le 10^{18}\),要求 \(1\le l\le r\le 10^{200}\)。
题解
神题。
注意到 \(f(10^{18}+x)=f(x)+1\)。
设 \(\sum\limits_{i=0}^{10^{18}-1}f(i)\equiv p\pmod{a}\),注意到 \(\sum\limits_{i=k}^{10^{18}-1+k}f(i)\equiv p+k\pmod{a}\),则 \(k=a-p\) 时有 \(p+k\equiv 0\pmod{a}\),\((l,r)=(a-p,10^{18}-1+a-p)\) 符合题意,只需求 \(p\)。
注意到 \(p=81\times 10^{18}\bmod a\)。
你问我怎么注意到?我也不知道,太神仙了。
CF1746E1 Joking (Easy Version) (CF \(\color{#ff0000}{2500}\))
交互题。
给定 \(n\),请猜测一个未知的整数 \(x\in[1,n]\)。
你可以进行至多 \(82\) 次如下询问:
- 任选一个整数集合 \(S\subset[1,n]\),询问 \(x\in S\) 是否成立。
- 交互库会说谎话,但保证相邻两次回答至少有一次是真的。
你还可以进行至多 \(2\) 次如下猜测:
- 任选一个整数 \(y\in[1,n]\),询问 \(x=y\) 是否成立。
- 交互库只说真话,当回复为成立时视为通过。
\(1\le n\le 10^5\)。
题解
设 \(n\) 表示当前时刻候选的整数个数。
当 \(n\ge 4\) 时,不断执行下列操作直到 \(n < 4\):(有点四分查找的意思)
- 将候选整数平均分为 \(A,B,C,D\) 四个集合。
- 询问 \(A\cup B\),设回复为 \(p\)。
- 询问 \(B\cup C\),设回复为 \(q\)。
- 若 \(p\land q\),则 \(x\in A\cup B\cup C\),排除集合 \(D\)。
- 若 \(p\land\neg q\),则 \(x\in A\cup B\cup D\),排除集合 \(C\)。
- 若 \(\neg p\land q\),则 \(x\in B\cup C\cup D\),排除集合 \(A\)。
- 若 \(\neg p\land\neg q\),则 \(x\in A\cup C\cup D\),排除集合 \(B\)。
当 \(n=3\) 时,执行下列操作:
- 设候选整数为 \(a,b,c\)。
- 询问 \(\{a\}\),设回复为 \(p\)。
- 询问 \(\{a,b\}\),设回复为 \(q\)。
- 询问 \(\{a,b\}\),设回复为 \(r\)。
- 询问 \(\{a\}\),设回复为 \(s\)。
- 若 \(\neg p\land q\land r\land\neg s\),则 \(x\in\{a,b\}\),排除元素 \(c\)。
- 否则,\(x\in\{b,c\}\),排除元素 \(b\)。
当 \(n\le 2\) 时,对所有候选整数进行猜测。
CF1491D Zookeeper and The Infinite Zoo (CF \(\color{#0000ff}{1800}\))
有一个无数个节点的图,\(u\) 到 \(u+v\) 有单向边,当且仅当 \(u\operatorname{and}v=v\)。\(q\) 次询问,每次询问 \(u\) 是否能到 \(v\)。
\(1\le q\le 10^5\),询问满足 \(1\le u,v < 2^{30}\)。
题解
显然 \(u > v\) 无解。
然后要求二进制任何一个后缀中 \(u\) 的 \(1\) 数量都不需要 \(v\) 的。
CF1753B Factorial Divisibility (CF \(\color{#0000ff}{1600}\))
判断 \(\sum\limits_{i=1}^na_i!\) 是否能被 \(x!\) 整除。
\(1\le n,x\le 5\times 10^5\),\(1\le a_i\le x\)。
题解
有 \((k+1)\times k!=(k+1)!\)。
统计每一个数码的个数,然后进一遍位,如果 \(1\sim x-1\) 都进位没了就可行。
CF1753C Wish I Knew How to Sort (CF \(\color{#aa00aa}{2000}\))
给定长度为 \(n\) 的 \(\texttt{01}\) 串 \(a\),每次操作等概率随机选取两个位置 \(i < j\),若 \(a_i > a_j\),交换 \(a_i\) 和 \(a_j\),不论交换成功与否都算一次操作。求使数列升序的期望操作次数。
\(1\le n\le 2\times 10^5\)。
题解
设共有 \(x\) 个 \(\texttt{0}\) 和 \(n-x\) 个 \(\texttt{1}\)。
目标是将 \(a\) 变为 \(\texttt{00}\cdots\texttt{0|11}\cdots\texttt{1}\),所有在左边内部交换或者右边内部交换的操作都是没有意义的,只有跨两边的交换才能使一对数归位(称为有效交换)。
设当前前 \(x\) 个位置有 \(k\) 个 \(\texttt{1}\),则后 \(n-x\) 个位置也有 \(k\) 个 \(\texttt{0}\),有效交换的概率为 \(\frac{k^2}{\binom{n}{2}}\),期望是概率的倒数,又由期望的线性性易知答案为 \(\sum\limits_{i=1}^k\frac{\binom{n}{2}}{i^2}\)。
P2507 [SCOI2008] 配对
给定两个长度为 \(n\) 的序列 \(a,b\),将 \(b\) 任意重排,要求 \(a_i\ne b_i\) 的情况下使得 \(\sum\limits_{i=1}^n|a_i-b_i|\) 最小。
\(1\le n\le 10^5\)。
题解
不妨设 \(a\) 升序。
显然无解当且仅当 \(n=1\) 且 \(a_1=b_1\)。
若不要求 \(a_i\ne b_i\),则是一个经典的排序不等式贪心问题,将 \(b\) 升序即可。
但是要求 \(a_i\ne b_i\),考虑在此基础上对 \(b\) 进行微调。如果 \(a_i=b_i\),自然地想到可以通过前后错一个的方式来使它们不同,同时也不会导致所求增加太多。具体地,\(a_i\) 只可能跟 \(b_{i-2},b_{i-1},\cdots,b_{i+2}\) 搭配。
设 \(dp_i\) 表示考虑 \(a,b\) 排序后的前 \(i\) 项的答案,只需要考虑对应项直接配对、两对交错配对、三对轮换配对转移即可。
CF1650G Counting Shortcuts (CF \(\color{#ff8c00}{2100}\))
给定一个无向图,求与 \((s,t)\) 之间的最短路长度差不超过 \(1\) 的路径条数。
\(1\le n,m\le 2\times 10^5\)。
题解
首先建分层图,所有边分为层内边、层间边两类。
最短路数量容易在 BFS 时 DP 求出。
容易发现比最短路长度恰好多 \(1\) 的路径一定走恰好一条层内边。从 \(s,t\) 分别 BFS,枚举层内边利用 DP 数组算贡献即可。
CF1637D Yet Another Minimization Problem (CF \(\color{#0000ff}{1800}\))
给定两个长度为 \(n\) 的数组 \(a,b\),可以选择若干下标 \(i\) 并交换 \(a_i,b_i\),最小化 \(\sum\limits_{i=1}^n\sum\limits_{j=i+1}^n(a_i+a_j)^2+\sum\limits_{i=1}^n\sum\limits_{j=i+1}^n(b_i+b_j)^2\)。
\(1\le n,\sum n,a_i,b_i\le 100\)。
题解
显然左边两项是定值,只需计算右边两项的最小值,DP 即可。
AGC044C Strange Dance (AT \(\color{#ff0000}{2889}\))
有一个初始为 \([0,1,2,\cdots,3^n-1]\) 的数列 \(a\),进行 \(m\) 次操作:
- 操作一:第 \(i\) 个数移动到第 \(j\) 个位置,当且仅当它们的三进制表示中 \(1\) 对应 \(2\),\(2\) 对应 \(1\)。
- 操作二:整个数列向右移动一位,最右边的移动到最左边。
\(1\le n\le 12\),\(1\le m\le 2\times 10^5\)。
题解
本题用到了一个 Trie 树下标加一的 trick,详见 题解 [AGC044C] Strange Dance。
ABC259Ex Yet Another Path Counting (AT \(\color{#ff8000}{2406}\))
给定一个 \(n\times n\) 矩阵,只能向下或向右走,求起点终点数字一样的路径条数。
\(1\le n\le 500\)。
题解
每种颜色分开考虑。设计两种算法分别解决颜色多和少的问题,然后根号分治,详见 题解 [ABC259Ex] Yet Another Path Counting。
ARC121D 1 or 2 (AT \(\color{#ff8000}{2784}\))
有两个可重集 \(A,B\),\(B\) 初始为 \(\varnothing\)。每次从 \(A\) 中删除一个或两个数,并将它们的和加入 \(B\) 中,重复操作直到 \(A=\varnothing\)。最小化 \(B\) 的极差。
\(1\le |A|\le 5\times 10^3\)。
题解
诈骗题,先观察如果必须删除两个数有什么性质,然后思考一个转化,详见 题解 [ARC121D] 1 or 2。
AGC047C Product Modulo (AT \(\color{#ff8000}{2496}\))
给定 \(n\) 个数,求他们两两的乘积对 \(200003\) 取模后的和。
\(1\le n\le 2\times 10^5\)。
题解
试着利用原根将两两的乘法化为卷积形式,然后使用 FFT 优化,详见 题解 [AGC047C] Product Modulo。
P4092 [HEOI2016/TJOI2016]树
有一棵 \(n\) 个节点的有根树,两种操作共 \(q\) 次:
- 标记一个节点。
- 询问离一个节点最近的标记过的祖先。
\(1\le n,q\le 10^5\)。
树剖解法并不够优美,试找出一种更简单的解法。
题解
记录每个点被标记次数,用并查集维护。若一个点被标记过至少一次,则令并查集中的父亲为自己;否则令并查集中的父亲为自己的父亲。
时间倒序离线。若为标记操作就将标记次数减一,当减为零时令并查集中的父亲为自己的父亲;若为查询操作,直接在并查集中找根。
CF576C Points on Plane (CF \(\color{#ff8c00}{2100}\))
好久以前做过的题,突然想起来就来补一下。
平面内有 \(n\) 个点 \(A_i(x_i,y_i)\),定义两点间距离为曼哈顿距离。请将 \(n\) 个点重新排序,使得相邻两个点的距离和不超过 \(2.5\times 10^9\)。
\(1\le n\le 10^6\),\(0\le x_i,y_i\le 10^6\)。
提示
将 \(A_i(x_i,y_i)\) 看成 \(Q_i[l_i,r_i]\),有没有使你想到什么算法?
题解
把莫队的排序方法套过来即可,注意需要奇偶块优化。
P5089 [eJOI2018] 元素周期表 | CF1012B Chemical table (CF \(\color{#aa00aa}{1900}\))
有一个 \(n\times m\) 的表格,有 \(q\) 个位置被涂成黄色。你可以选择任意两行、两列,若交出的四个格子中有三个是黄色的,则可以不花费代价将第四个也涂黄。另外,你也可以花费 \(1\) 的代价指定任意一个格子涂黄。求将整个表格都涂黄的最少代价。
\(1\le n,m,q\le 2\times 10^5\),注意不是 \(nm\) 的乘积。
题解有时间再更。
AT_ddcc2020_qual_e Majority of Balls (AT \(\color{#ff8000}{2436}\))
交互题。
有 \(2n\) 个数,其中 \(n\) 个是 \(1\) 另外 \(n\) 个是 \(-1\)。每次你可以查询任意 \(n\) 个数和的正负性,求出每个数。
\(1\le n\le 99\) 且 \(2\nmid n\),询问次数不超过 \(210\)。
题解我做完再更。
ARC153C ± Increasing Sequence (AT \(\color{#0000ff}{1960}\))
给定 \(\pm 1\) 数列 \(a\),构造等长数列 \(x\),满足 \(|x_i|\le 10^{12}\)、序列严格递增且 \(\sum a_ix_i=0\),或判定无解。
\(1\le n\le 2\times 10^5\)。
题解
考虑构造一个初始的 \(x\) 然后进行调整,详见 题解 ARC153C【± Increasing Sequence】。
ARC154D A + B > C ? (AT \(\color{#c0c000}{2265}\))
交互题。
有一个 \(1\sim n\) 的排列 \(p\),每次可以询问 \((i,j,k)\),交互库给出 \(p_i+p_j>p_k\) 是否成立,求出这个排列。
\(1\le n\le 2\times 10^3\),询问次数不超过 \(2.5\times 10^4\)。
题解
考虑找出 \(1\) 的位置,然后 \(p_i+1>p_j\iff p_i\ge p_j\),详见 题解 ARC154D【A + B > C ?】。
CF1375F Integer Game (CF 2600)
待添加。
ARC070F HonestOrUnkind (AT 3365)
待添加。
AGC019F Yes or No (AT 3742)
待添加。
CF1508D Swap Pass (CF 3000)
待添加。
AGC030D Inversion Sum | CF258D Little Elephant and Broken Sorting (AT 2712 | CF 2600)
待添加。
CF1260E Tournament (CF 2400)
待添加。
CF1545D AquaMoon and Wrong Coordinate (CF 3000)
待添加。
CF1768F Wonderful Jump (CF 2900)
待添加。
AGC002F Leftmost Ball (AT 3399)
待添加。
CF103119I Nim Cheater
待添加。
P4211 [LNOI2014]LCA
待添加。
CF1775E The Human Equation (CF 2100)
待添加。
ABC025D、CF1149D、P5304