非传统题选讲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\) 结论。
-
类比的思想。
-
同时和上一题相同,也是倍增和二分。

浙公网安备 33010602011771号