Gym101350A. Sherlock Bones
题目大意: 给定一个长度为 \(n\) 的 \(01\) 序列 \(\{s_n\}\),定义 \(F(i, j)\) 表示序列第 \(i\) 项到第 \(j\) 项之间 \(1\) 的个数。求有多少个三元组 \((i, j, k)\) 满足 \(i < j < k\) 且 \(F(i, j) = F(j, k)\) 且 \(s_j = 1\)。
数据范围: \(3 \leq n \leq 2 \times 10^5\)
简要题解: 注意到对于一个合法的三元组 \((i, j, k)\),则 \(F(i, k) = 2F(i, j) - 1\) 必为奇数。而对于任意的 \(F(i, k)\) 为奇数,其对应的 \(j\) 所在的位置是唯一的。这意味着我们只要统计有多少二元组 \((i, k)\) 满足 \(F(i, k)\) 为奇数即可,用前缀和可以方便地统计。
时空复杂度: \(O(n) - O(n)\)
关键字: 奇偶分析,前缀和
Gym101350E. Competitive Seagulls
题目大意: \(n\) 只海鸥排成一排,设当前最长连续海鸥段的长度为 \(L\),令 \(P\) 为质数且 \(P \leq \lceil \dfrac{L}{2} \rceil\),若不存在满足条件的质数,那么 \(P\) 取 \(1\)。现在有两个人轮流取走海鸥,每次可以取走连续的 \(P\) 只,其中 \(P\) 满足上述条件,无法再取走海鸥的人输。问先手是否有必胜策略。
数据范围: \(1 \leq n \leq 10^7\)
简要题解: 当 \(n = 2, 3\) 时,显然先手必败。当 \(n \geq 4\) 时,若 \(n\) 为偶数,那么先手先取走最中间两只海鸥,则所有的海鸥恰好被分割成左右对称的两段,此时,后手如何取,先手只要对称地取即可,故先手有必胜策略,若 \(n\) 为奇数,则先手先取走最中间的三只海鸥,其余同上。
时空复杂度: \(O(1) - O(1)\)
关键字: 博弈,构造