一些比赛的题解

A

把第二个字符串反转,然后对于第一个字符串中为 # 的位置,输出第二个字符串中对应位置的字符即可。

B

考虑枚举答案(需要注意不能二分),假设当前枚举的答案为 \(res\),只需考虑怎么判定该答案是否合法。不难发现,找到 \(res\)不同的两个倍数同时属于这个区间,\(res\) 就是合法的。

C

直接暴力模拟除的过程。每次该位的答案为 \(\lfloor\frac{a\times k}{b}\rfloor\),同时做一个 \(a\rightarrow a\times k\bmod b\) 的操作即可。

D

不难发现有交集的区间只有两种情况。一种是 \(a\) 包含 \(b\),另外一种是 \(a\)\(b\) 相交。只需枚举所有区间对,找出交集最大值即可。

E

对于每个位置 \(i\) 二分一个 \(p\),使得 \(\displaystyle\sum_{j=i}^{p-1}l_j=m\),若不存在这样的 \(p\),则令 \(p=-1\)。我们记 \(ne_i=p\)

从每个未被访问过的位置出发,一直做 \(i\rightarrow ne_i\) 的操作(直到越界),记录做了几次,然后取最大值即可。

F

先找出第 \(i\) 个数二进制下最低的 \(1\),设他的位置为 \(p_i\)。不难发现若取走一个第 \(i\) 堆的石子,会导致该数二进制下第 \(0\)\(p_i\) 位全部取反。

所以我们先记录一开始的异或值 \(s\),然后从高到低遍历每个二进制位,如果发现 \(s\) 的第 \(j\) 位不是 \(0\),则找到一个 \(p_i=j\) 的数取走一个石子(找不到则无解),最后记录做了多少次操作即可。

posted @ 2025-01-09 21:11  zxh923  阅读(15)  评论(0)    收藏  举报