本文主要是介绍2019河北省大学生程序设计竞赛 K.河北美食(STL模拟),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意:
解法:
用map<string,int>将材料转为数字编号,用cnt[i]表示编号为i的材料有多少种,
用多少材料就将对应材料的cnt减少,如果出现cnt[]<0,那么就不合法,
否则合法,一次输出剩余材料数量即可.
code:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxm=2e5+5;
map<string,int>mp;
map<int,string>rev;
int cnt[maxm];
int idx;
int n,m;
void solve(){cin>>n>>m;for(int i=1;i<=n;i++){string s;cin>>s;int x;cin>>x;if(!mp[s]){mp[s]=++idx;rev[idx]=s;}cnt[mp[s]]+=x;}for(int i=1;i<=m;i++){int k;cin>>k;for(int j=1;j<=k;j++){string s;cin>>s;int x;cin>>x;cnt[mp[s]]-=x;}}for(int i=1;i<=idx;i++){if(cnt[i]<0){cout<<"NO"<<endl;return ;}}cout<<"YES"<<endl;for(int i=1;i<=idx;i++){if(cnt[i]){cout<<rev[i]<<' '<<cnt[i]<<endl;}}
}
signed main(){ios::sync_with_stdio(0);solve();return 0;
}
这篇关于2019河北省大学生程序设计竞赛 K.河北美食(STL模拟)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!