#80. 【列表】卡牌游戏(信息素养复赛真题)

【列表】卡牌游戏(信息素养复赛真题)

题目描述

nn 张卡牌。第 ii 张卡牌的位置是position[i]。我们需要把所有卡牌移到同一个位置。在一步中,我们可以将第i张卡牌的位置从position[i]改变位置,改变位置时需要消耗一定的代价: 1、position[i]+2position[i]-2,此时没有代价,即 cost=0;或者,牌没有移动位置的话,也没有代价。 2、position[i]+1position[i]-1,此时的代价为cost=1

请注意,每张卡牌可以移动多次。

现给出所有卡牌的位置,请你编程输出将所有卡牌移动到同一位置上所需要最小代价。

例如,我们现在有这些卡牌及其位置。假设我们需要将所有卡牌移动到 2020 位置。则,每张牌的代价分别是: 1、第一张牌连续移动9次,每次移动2格,代价为0; 2、第二张牌先连续移动8次2格,最后再移动1格,代价为1; 3、第三张牌先连续移动4次2格,最后再移动1格,代价为1; 4、第四张牌先连续移动12次2格,最后再移动1格,代价为1; 5、第五张牌连续移动24次2格,代价为0; 6、第六张牌先连续移动25次2格,最后再移动1格,代价为1; 7、第七张牌先连续移动39次2格,最后再移动1格,代价为1; 最终,将所有牌(7张牌)移动到位置20的总代价为5。

要求最小代价,则需要遍历所有可能的位置即可。

题目格式

输入

输入一行正整数,每个数字之间用空格隔开。

输出

输出将所有卡牌移动到同一位置上所需要的最小代价。

题目样例

1 2 3
1

题目解释

现在,有三张牌,三张牌的位置分别为1、2、3。可以容易想到,代码最小的情况是:将第一张牌从位置1移到位置3,代价为0;第三张牌位置不变,代价为0;第二张牌从位置2移到位置3,代价为1。