趣题记录(被鸽了)

趣题记录

为啥是趣题记录?

之前试过很多次按时间顺序编年体的做题记录,但是都因为在机房做题不方便更新、有些题没有什么意义等原因导致越攒越多,最后就咕掉了,因此决定试一试只记录有趣的题。

记录

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\)

题解

\[\begin{aligned} &\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\\ =&\sum\limits_{i=1}^n\sum\limits_{j=i+1}^n(a_i^2+a_j^2+2a_ia_j)+\sum\limits_{i=1}^n\sum\limits_{j=i+1}^n(b_i^2+b_j^2+2b_ib_j)\\ =&(n-1)\sum\limits_{i=1}^na_i^2+(n-1)\sum\limits_{i=1}^nb_i^2+2\sum\limits_{i=1}^{n}\sum\limits_{j=i+1}^na_ia_j+2\sum\limits_{i=1}^{n}\sum\limits_{j=i+1}^nb_ib_j \end{aligned} \]

显然左边两项是定值,只需计算右边两项的最小值,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

posted @ 2022-10-16 15:11  rui_er  阅读(232)  评论(0编辑  收藏  举报