题目链接:https://ac.nowcoder.com/acm/contest/903/K
Map<String,Integer[]>,Key存储食材名字;Value 中 Integer[0]表示输入顺序,Integer[1]表示食材数量;接下来的操作就是对Value中的食材数量进行减法运算;最终结果通过Integer[0]的输入顺序进行排序输出。代码如下:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Map.Entry;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int m = in.nextInt();
Map<String, Integer[]> map = new HashMap<>();
for (int i = 0; i < n; i++) {
map.put(in.next(), new Integer[] {i,in.nextInt()});
}
boolean flag = false;
for (int i = 0; i < m; i++) {
int k = in.nextInt();
for(int j = 0;j<k;j++) {
String s1 = in.next();
int x = in.nextInt();
if (map.get(s1)[1] >= x) {
map.get(s1)[1]-=x;
}
else {
flag = true;
break;
}
}
if (flag)
break;
}
if (flag)
System.out.println("NO");
else {
System.out.println("YES");
List<Map.Entry<String, Integer[]>> list = new ArrayList<Map.Entry<String, Integer[]>>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Integer[]>>() {
@Override
public int compare(Entry<String, Integer[]> o1, Entry<String, Integer[]> o2) {
return o1.getValue()[0].compareTo(o2.getValue()[0]);
}
});
for (Map.Entry<String, Integer[]> mapping : list) {
if(mapping.getValue()[1]>0)
System.out.println(mapping.getKey() + " " + mapping.getValue()[1]);
}
}
}
}