P9045 题解

· · 题解

题目大意

n 瓶品牌不同的橙汁,其中第 i 瓶的品牌是 a_i,求出使前 k 瓶橙汁品牌不相同的最少操作的次数(只能交换两瓶相邻的橙汁)

题目解法

可以看出来,这是一道入门的贪心题目,但是还是有一定的思维难度的。还要用道桶思想。

首先,我们考虑一下什么时候是无解的。我们把橙汁出现的品牌的数量定义为 d,那么如果 d<k,此时无论如何都会有相同的品牌也就是无解。其他情况都是有解的。

之后考虑一下有解的时候如何做才能使操作次数最少,我们考虑想办法把没有出现过的品牌尽量往左边也就是前面移动,用一个桶来存储这个品牌是否出现,如何输入的是一个新的品牌,就把 d+1,之后就是计算将这个品牌移动需要的次数(也就是代价),次数就是 i-(d+1),去括号可得 i-d-1,也就是用当前的位置减去已经出现的品牌再减去 1

之后就是有两点值得注意的