CF1981C 题解

吐槽:恶心题,赛后才调出来一发过/tuu。

友情提示:这场比赛 CF 有中文官方题解哦!这题使用中文版官方题解 LCA 做也是很好的一种方法。

思路

首先不难发现,一个数先乘 22 后除 22 会得到原数。若 aabb 间有 cc1-1,则我们可以对 aa 先除后乘得到 bb,最后浪费多余的 1-1

首先我们当然贪心考虑最少的乘除次数,那时,aa 被除后的“渣渣”cc 的二进制是 bb 的前缀,此时只要从前缀后一位开始,逐位考虑是否需要在乘 22 后加 11。此时,如果 1-1 不够用了或剩下的 1-1 是奇数,则无解。

最后考虑前缀 1-1 和后缀 1-1。首先整个数列都是 1-1 特判一下,1,21,2 交替输出就行。其次前后缀 1-1 处理方法都一样,可以对最前(最后)的非 1-1 进行 1,21,2 倍交替输出就可以。

代码过长,故放个 CF 提交记录链接(含代码)。

posted @ 2024-06-02 14:52  Vitamin_B  阅读(25)  评论(0)    收藏  举报  来源