【筆試題】拼多多1小熊吃糖果
阿新 • • 發佈:2019-02-18
描述
有n只小熊,他們有著不同的戰鬥力。每次他們吃糖時,會按照戰鬥力來排。戰鬥力高的小熊擁有優先選擇權。前邊的小熊吃飽了,後邊的小熊才能吃。每隻小熊有一個飢餓值,每次進食時,小熊會選擇最大的能填飽自己當前飢餓值的那顆糖來吃,可能吃完沒飽會重複上述過程,但不會選擇吃撐。
給出n只小熊的戰鬥力和飢餓值,和m顆糖。
求進食完,每隻小熊剩餘的飢餓值。
第一行:兩個整數,n m分別代表小熊的數量和糖的數量。
第二行:m個整數,糖的能量。
接下來:n行,每行兩個整數,分別表示小熊的戰鬥力和飢餓值。
輸入
2 5
5 6 10 20 30(糖值)
4 34(優先順序和飢餓值)
5 35
輸出
4
0
分析:
- 對戰鬥力排序的時候,飢餓值也排序。
- 列印的時候,要按原來的順序列印。所以排序前,還要一個輔助陣列記錄順序。
- 最後可以不排序,按索引順序來列印。
import java.util.Arrays;
import java.util.Scanner;
public class XiaoXiong1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in );
int n = sc.nextInt();
int m = sc.nextInt();
int suger[] = new int[m];
int[][] panda = new int[n][3];
for(int i=0;i<m;i++){
suger[i] = sc.nextInt();
}
for(int i=0;i<n;i++){
panda[i][0] = sc.nextInt();
panda[i][1] = sc.nextInt();
panda[i][2 ] = i;
}
for(int i=0;i<n;i++){
for(int j=n-1;j>i;j--){
if(panda[j][0]>panda[j-1][0]){
int temp1 = panda[j][0];
int temp2 = panda[j][1];
int temp3 = panda[j][2];
panda[j][0] = panda[j-1][0];
panda[j-1][0] = temp1;
panda[j][1] = panda[j-1][1];
panda[j-1][1] = temp2;
panda[j][2] = panda[j-1][2];
panda[j-1][2] = temp3;
}
}
}
Arrays.sort(suger);
for(int i=0;i<n;i++){
for(int j=m-1;j>=0;j--){
if(panda[i][1]>=suger[j]){
panda[i][1]-=suger[j];
suger[j] = Integer.MAX_VALUE;
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(panda[j][2]==i){
System.out.println(panda[j][1]);
}
}
}
}
}