非传统题选讲1

CF1672E

好题。

看到范围 \(n + 30\),想到用 \(O(n + \log_2 n)\) 的复杂度。

从特殊到一般。

考虑先二分出所有串都在第一行的最小长度 \(L\)

考虑如何转移到 \(k\) 行。

发现第 \(k\) 行的列数更优秀时,一定满足列数 $\le \left \lfloor \frac{L}{k} \right \rfloor $。

又因为行的转移最多减少 \(k - 1\) 的空格,于是又 $\ge \left \lfloor \frac{L}{k} \right \rfloor $。

于是先二分出 \(L\),再枚举 \(k\),暴力判断即可。

总结:

  • 通过数据猜想范围。

  • 从特殊到一般。

CF1887E

一个比较经典的套路是,将行和列当做点,将中间的颜色看做边权为 \(c\) 的边,构成二分图。

注意到原环上的每条边的颜色都不相同。

考虑每次操作,在大环的中间连一条边,将环分成点数相同的两个部分。

不难注意到,新的环的颜色也不相同。

最终求四元环,最多操作 \(\log_2 n - 2\) 次。

总结:

  • 经典操作:行列关系,建立二分图。

  • 观察图中初始边的 \(2n\) 种颜色的性质。

CF1354G

好题。

有一个经典的观察,发现 \(k \le \frac{n}{2}\),想到随机化。

原因:每次随机选取一个盒子,其中装有礼物的概率不超过 \(\frac{1}{2}\)。若每次选取都是礼物的概率就相当的小了。

于是我们很容易发现可以随机取 \(20\) 个数,与第一个数比较;可以快速判断第一个数是否为石头或者礼物。

若为礼物,则直接输出即可。

否则考虑找出第一个礼物。

看到查询次数的限制,一个显然的做法是带 \(\log_2\) 的。

考虑二分倍增

快速找到一个区间中包含石头,然后二分其出现位置即可。

总结:

  • \(k \le \frac{n}{2}\),想到随机化。

  • 找出区间大小不同,考虑倍增再二分

  • 交互题中常见的 \(\log_2\) 做法,为倍增,二分等。

CF1103B

类比猜数游戏,于是考虑类似的二分。

显然 \((2x \mod a) \ge (x \mod a)\),则 \(x \le a \le 2x\)

我们可以先倍增到这个数所在的区间,再用上面这条性质进行二分。

总结:

  • \((2x \mod a) \ge (x \mod a)\),则 \(x \le a \le 2x\) 结论。

  • 类比的思想。

  • 同时和上一题相同,也是倍增和二分。

posted @ 2025-08-08 23:01  LoserBpds  阅读(13)  评论(0)    收藏  举报