小熊喫糖
1.小熊有戰鬥力和飢餓值;
2.戰鬥值高的小熊優先喫糖,消除飢餓;
3.若小熊未喫飽,將繼續喫糖來消除飢餓,但是小熊不會喫撐;
輸入:
第一行兩個整數,一個是小熊個數n,糖果個數m;
第二行,每個糖果的大小,表示可以消除多少的飢餓;
剩下n行,兩個整數,一個數是小熊的戰鬥力,一個值是小熊的飢餓值;
返回:
返回每個小熊剩餘的飢餓值。
實例:
2 5
5 6 10 20 30
4 34
3 35
返回:
4
0
注意:下述代碼只是通過上述測試用例,並沒有具體在測試。
分析:
- 小熊喫糖,根據戰鬥力具有優先權,所以需要對小熊按照戰鬥力排序;
- 小熊吃了一個糖過後,該糖果就不存在了,所以suger[i]=0;
- 小熊喫糖的終止條件是:小熊剩下的飢餓值小於所有糖果的最小值;或者剩餘飢餓值==0;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class test1 {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int n = in.nextInt();//bear
int m = in.nextInt();//suger
int[] suger = new int[m];
int[] bear = new int[n];
for(int i=0;i<m;i++){
suger[i] = in.nextInt();
}
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
for(int i=0;i<n;i++){
int zdl = in.nextInt();
int je = in.nextInt();
bear[i] = zdl;
map.put(zdl,je);
}
List<Map.Entry<Integer,Integer>> list = new LinkedList<Map.Entry<Integer,Integer>>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
public int compare(Map.Entry<Integer, Integer> arg0,Map.Entry<Integer, Integer> arg1){
return (arg1.getKey()-arg0.getKey()==0) ? (arg0.getKey()-arg1.getKey()):(arg1.getKey()-arg0.getKey());
}
});
for(int i = 0;i<list.size();i++){
int jez = list.get(i).getValue();
Arrays.sort(suger);
for(int j=m-1;j>=0;j--){
if(jez>=suger[j]){
jez -=suger[j];
suger[j] = 0;
}else{
continue;
}
}
map.put(list.get(i).getKey(), jez);
}
for(int i=0;i<n;i++){
System.out.println(map.get(bear[i]));
}
}
}
運行結果:
輸入:
2 5
5 6 10 20 30
4 34
3 35
輸出:
4
0