题号:NC50027
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M
64bit IO Format: %lld
题目描述
鹏鹏最近喜欢上了玩积木,他现在很多种积木,还有一些玩具图纸,他现在想知道他能不能把所有的玩具全部拼出来。
输入描述:
第一行两个整数n,m,n表示积木的种类,m表示图纸的数量。
接下来n行,每行有一个字符串si 表示某种积木的名称,后面跟一个整数ai表示该种积木的数量。字符串与数字之间会以空格隔开。
然后m行,每行首先有一个整数k,表示该玩具需要的积木种类数。
随后有k个字符串,表示积木名称,没个字符串后跟一个数字ti,表示该种积木所需的数量。字符串与数字之间空格隔开。
1≤n,m≤1000,1≤k≤1000 且 k≤n
0≤ai,ti≤1e9,1≤|si|≤25
输出描述:
保证输入合法,积木名称不会相同,且图纸中不会有未出现的积木。如果所有积木足够将所有图纸的玩具全部制作一遍,请输出一行“YES”,
并且按照输入顺序输出剩下的积木名称以及对应的数量,每行一种积木,用空格将名称和其数量隔开。
如果某种积木全部被用完,则不输出该积木。
如果不能,输出一行“NO”。
示例1
输入
复制
5 3
water 100
flour 20
cabbage 71
pork 12
bean 5
2 water 20 flour 5
3 water 70 cabbage 54 pork 10
5 water 1 flour 1 cabbage 1 pork 2 bean 1
输出
复制
YES
water 9
flour 14
cabbage 16
bean 4