题目链接: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]);
			}
		}
	}
}