CF1678A Tokitsukaze and All Zero Sequence 題解
ShanCreeperPro · · 题解
CF1678A Tokitsukaze and All Zero Sequence 題解
题面翻译:
给定
- 如果
a_i=a_j ,将其中一个数变为0 ; - 否则,将其中一个数变为
\min(a_i,a_j) 。
输出将数列全部变为
可以证明一定有解。
大胆猜测,最后所需要的操作次数是:
- 如果数列中没有出现
a_i=a_j 且数列中没有0 的情况,则:
- 如果数列中有
0 ,则:
- 如果数列中出现
a_i=a_j ,则:
接下来,就是对这个贪心思想的证明:
首先,我们需要将数列中的数至少有
- 如果
a_1=a_2 ,则不需要进行第二次操作; - 如果
a_1 \neq a_2 ,则将a_1 和a_2 进行第二次操作,将a_1 变为a_2 ,此时a_1=a_2 。
上述操作需要的步骤数为
然后,将每个数字变为
接着,将
然后从
- 将
a_i 和a_{i+1} 进行第二次操作,因为a_i 已经为0 ,又因为数据范围中0 \leq a_i ,所以不会出现比0 小的数字:- 如果
a_{i+1}=0 ,则需要跳过; - 否则,将
a_{i+1} 变为0 。
- 如果