题目:传送门
**思路:**模拟即可(我用的是map),但注意当gi = 0时,直接跳过循环。用ans数组来保存开始的顺序。
代码:
//无锡市金桥初中 费思量
#include <bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
template < typename T > void read(T &x)
{
int f = 1;x = 0;char c = getchar();
for (;!isdigit(c);c = getchar()) if (c == '-') f = -f;
for (; isdigit(c);c = getchar()) x = x * 10 + c - '0';
x *= f;
}
map < string , int > a;
string ans[15];
int main()
{
//freopen(".in", "r", stdin);
//freopen(".out", "w", stdout);
int n;
read(n);
for(int i = 1;i <= n;i++)
{
string s;
cin >> s;
a.insert(make_pair(s, 0));
ans[i] = s;
}
for(int i = 1;i <= n;i++)
{
string s;
cin >> s;
int mon, gi;
read(mon);
read(gi);
if(gi == 0) continue;
a[s] -= mon;
for(int j = 1;j <= gi;j++)
{
string sx;
cin >> sx;
a[sx] += mon / gi;
}
a[s] += mon % gi;
}
for(int i = 1;i <= n;i++)
cout << ans[i] << " " << a[ans[i]] << endl;
return 0;
}