招商银行笔试题之修塔游戏
生活随笔
收集整理的這篇文章主要介紹了
招商银行笔试题之修塔游戏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
小招正在玩一款修塔游戲:系統中有n座高塔,每座高塔由若干個高度相同的方塊堆砌而成。修塔游戲的規則為:
小招每次只能完成上述兩個動作中的一個動作。游戲的目標是使n座高塔中至少有k座高塔的高度相同,請問小招最少需要多少次才能完成游戲。
輸入描述:
輸入共兩行,第一行為n和k(1≤k≤n≤200000),第二行為n座塔的高度組成的數組 a1, a2, …an(1≤aj≤10000)。
輸出描述:
輸出值為最少需要多少次動作才能完成游戲。
示例1
輸入
6 5 1 2 2 4 2 3輸出
3AC代碼 [ JAVA ]
public class Main {private static int moveBricksCount(int n, int k, int[] bricks, int sum) {int count = Integer.MAX_VALUE;Arrays.sort(bricks);int i = 0, si = 0, j;while (i < n) {j = i;while (j < n && bricks[j] == bricks[i]) {sum -= bricks[i];j++;}int nd = Math.max(0, k - j + i);if (nd == 0) {count = 0;}if (j >= k) {count = Math.min(count, i * bricks[i] - si - (i - nd));}if (n - i >= k) {count = Math.min(count, sum - (n - j) * bricks[i] - (n - j - nd));}count = Math.min(count, i * bricks[i] - si + sum - (n - j) * bricks[i] - (n - (j - i) - nd));si += bricks[i] * (j - i);i = j;}return count;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt(); int k = sc.nextInt(); int[] bricks = new int[n];int sum = 0; for (int i = 0; i < n; i++) {bricks[i] = sc.nextInt();sum = sum + bricks[i];}System.out.println(moveBricksCount(n, k, bricks, sum));} }總結
以上是生活随笔為你收集整理的招商银行笔试题之修塔游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html绘图插件,canvas,svg,
- 下一篇: java将页面转为pdf和pdf上添加盖