有一个由 NPNP 个人构成的朋友圈,圈内的人决定互相赠送一些金钱作为礼物。
他们不一定会给每个人都赠送礼物,当然,也不一定从每个人那里都收到礼物。
他们赠送礼物(金钱)的规则如下:
每个人都会去银行取一笔钱,然后将这笔钱平均分给他要赠与礼物的人们。
注意,没有低于 11 元面值的零钱,因此,如果一个人取了 77 元钱,然后要分给两个朋友,那么每个朋友都将分到 33 元钱,剩下的 11 元钱,将会保留到送礼者的手中。
现在给定每一个人的名字,以及每个人要花费的金钱数量和他们要送礼的名单。
请你计算一下,每个人收到的金钱数目减去送出的金钱数目的结果是多少。
输入格式
第一行包含一个整数 NPNP,表示总人数。
接下来 NPNP 行,每行包含一个由字母构成的长度不超过 1414 的字符串,表示一个人的名字。
接下来直到输入结束,会包含 NPNP 组信息。
每组信息的第一行,包含一个送礼人的名字。
第二行包含两个数字,分别表示准备均分给他人的送礼金(一个不超过2000的非负整数)以及将要收到礼物的人数 NGiNGi。
接下来 NGiNGi 行,每行包含一个收礼人的名字,同一个人的名字当然不会在一个人的送礼名单中出现多次。
输出格式
输出共 NPNP 行,每行包含一个人的名字,以及他的净损益值(收到的金钱数目 - 送出的金钱数目)。
输出的名单顺序应与输入第2行开始给出的名单顺序相同。
注意送出的金钱值一定是整数,剩下无法分配的钱,由送礼者保留(送礼者保留的钱视为送礼者收到的钱)。
数据范围
2≤NP≤102≤NP≤10,
0≤NGi≤NP0≤NGi≤NP
输入样例:
5
dave
laura
owen
vick
amr
dave
200 3
laura
owen
vick
owen
500 1
dave
amr
150 2
vick
owen
laura
0 2
amr
vick
vick
0 0
输出样例:
dave 302
laura 66
owen -359
vick 141
amr -150
样例解释
共有 55 个人,dave, laura, owen, vick, amr。
最初他们每个人都有 0 元钱。
dave | laura | owen | vick | amr |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
首先,dave 取出 200200 元钱,送给laura, owen, vick,他们每人得 6666 元,dave 剩 22 元。
dave | laura | owen | vick | amr |
---|---|---|---|---|
-198 | 66 | 66 | 66 | 0 |
然后 owen 送给 dave 500500 元钱。
dave | laura | owen | vick | amr |
---|---|---|---|---|
302 | 66 | -434 | 66 | 0 |
再然后 amr 拿出 150150 元钱,送给 vick 和 owen。
dave | laura | owen | vick | amr |
---|---|---|---|---|
302 | 66 | -359 | 141 | -150 |
laura 嘴上说要送 amr 和 vick,其实一分钱都没准备,vick 压根没想送给任何人钱,因此不产生任何影响。
那么最终每个人的净损益值即为:
dave | laura | owen | vick | amr |
---|---|---|---|---|
302 | 66 | -359 | 141 | -150 |
这就是STLmap呀
#include<bits/stdc++.h>
using namespace std;
map<string,int> a;//使用STL容器
string st1,st2,name[20];
int n,i,j,s,m;
int main(){
cin>>n;
for(i=1;i<=n;i++){
cin>>name[i];
}
for(i=1;i<=n;i++){
cin>>st1>>s>>m;
for(j=1;j<=m;j++){
cin>>st2;
a[st2]+=s/m;
a[st1]-=s/m;
}
}
for(i=1;i<=n;i++){
cout<<name[i]<<" "<<a[name[i]]<<endl;
}
return 0;
}