NC26009. 河北美食
描述
不知不觉当中,河北成为了一些人心中的“美食荒漠”,除了驴肉火烧,大抵想不起什么河北的美食了。大概是京津太过闪耀,盖过了冀菜的光芒。其实河北并不是美食荒漠,像邯郸的豆沫,石家庄的缸炉烧饼,唐山的酥糖,秦皇岛的皮皮虾,总能勾起心中最美好的回忆。icebound最喜欢吃河北菜,于是他想要大厨做一桌河北菜宴请宾客。icebound购买了一些食材,并且制订了宴会的菜单。但是他并不知道这些食材是否足够,所以希望你写一个程序帮助他。
输入描述
第一行给出两个整数 n , m,分别代表食材种类和菜品数量。
第 二 到第 n+1 行,每行一个由小写字母组成的字符串 和一个数字 ,表示这种食材的名称和数量。
接下来 m 行,每行首先有一个整数 k,代表这种菜品所需的食材种类数。
随后将会有 k 个字符串,代表食材名称,每个字符串后跟有一个数字 ,用空格隔开,代表需要的食材数量。
, 且
,
保证输入合法,食材名称不会相同,且菜谱中不会有未出现的食材。
输出描述
如果食材足够将菜单上的所有菜品全部制作一遍,请输出一行“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
Python3 解法, 执行用时: 70ms, 内存消耗: 4836K, 提交时间: 2022-06-25 15:00:23
from collections import defaultdict n,m = map(int,input().split()) mp = defaultdict(int) for _ in range(n): k,v = input().split() mp[k] += int(v) for _ in range(m): tmp = input().split() for i in range(1,len(tmp),2): ma,v = tmp[i],int(tmp[i+1]) mp[ma] -= v fl = True for k,v in mp.items(): if v < 0: fl = False if fl: print("YES") for k,v in mp.items(): if v == 0: continue print(k,v) else: print("NO")
C++11(clang++ 3.9) 解法, 执行用时: 17ms, 内存消耗: 732K, 提交时间: 2020-02-26 11:24:30
#include<bits/stdc++.h> using namespace std; int main() { int n,m,t,c; string s,str[1001]; map<string,int>v; cin>>n>>m; for(int i=0;i<n;i++) { cin>>str[i]>>t; v[str[i]]=t; } while(m--) { cin>>c; while(c--) { cin>>s>>t; v[s]-=t; if(v[s]<0) { cout<<"NO\n"; return 0; } } } cout<<"YES\n"; for(int i=0;i<n;i++) { if(v[str[i]]>0) cout<<str[i]<<" "<<v[str[i]]<<endl; } return 0; }
C++14(g++5.4) 解法, 执行用时: 20ms, 内存消耗: 872K, 提交时间: 2019-05-25 12:43:54
#include<bits/stdc++.h> using namespace std; int main (){ map<string ,int > sc; string s,ss[10010]; int m,n,a,b; cin>>n>>m; for(int i=0;i<n;i++){ cin>>ss[i]>>a; sc[ss[i]]=a; } while(m--){ cin>>b; while(b--){ cin>>s>>a; sc[s]-=a; if(sc[s]<0) { cout<<"NO"<<endl; return 0; } } } cout<<"YES"<<endl; for(int i=0;i<n;i++){ if(sc[ss[i]]>0) cout<<ss[i]<<" "<<sc[ss[i]]<<endl; } }