Description
阿生的朋友都知道阿生是个吃货,吃对于他来说就是生活中必不可少的一件事。阿生最近突然想自己制作一些没吃过的美食。因此他买了一些原料。但是他并不知道这些原料是否足够,所以希望你写一个程序帮助他。
阿生将会给出每种原料的名称和数量,以及一道完整的菜所需要的原料。它包含每种菜所需的原料及数量。并且每道菜只需制作一次。
Input
第一行给出两个整数 n , m,分别代表原料种类和菜品的数量。
第 二 到第 n+1 行,每行一个由小写字母组成的字符串si和一个数字ai,表示这种原料的名称和数量。
接下来 m 行,每行首先有一个整数 k,代表这种菜品所需的原料种类数。
随后将会有 k 个字符串,代表原料名称,每个字符串后跟有一个数字ti,用空格隔开,代表需要的原料数量。
1 <= n,m <= 1000, 1 <= k<= 10,且 k<=n
1 <= ai,ti <= 10^9, 1<= | si | <= 20
保证输入合法,原料名称不会相同,且菜谱中不会有未出现的食材。
Output
如果原料足够将菜单上的所有菜品全部制作一遍,请输出一行“YES”,并且按照输入顺序输出剩下的食材以及对应的数量,每行一个食材,用空格将食材和其数量隔开。如果某种食材全部被用完,则不输出该食材。
如果不能,输出一行“NO”。
Sample Input 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
Sample Output 1
YES
water 9
flour 14
cabbage 16
bean 4
map存食材,然后顺序输出得了~~
#include<iostream>
#include<map>
using namespace std;
string str[1000];
int main(){
int m,n;
cin>>m>>n;
map<string,int>cai;
for(int i=0;i<m;i++){
string s;
int l;
cin>>s>>l;
str[i]=s;
cai[s]=l;
}
for(int i=0;i<n;i++){
int k;
cin>>k;
while(k>0){
k--;
string s;
int l;
cin>>s>>l;
if(cai[s]>=l){
cai[s]-=l;
}
else{
cout<<"NO";
return 0;
}
}
}
cout<<"YES"<<endl;
for(int i=0;i<m;i++){
if(cai[str[i]]==0){
continue;
}
cout<<str[i]<<" "<<cai[str[i]]<<endl;
}
return 0;
}