贪婪的送礼人

有一个由 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 元钱。

davelauraowenvickamr
00000

首先,dave 取出 200200 元钱,送给laura, owen, vick,他们每人得 6666 元,dave 剩 22 元。

davelauraowenvickamr
-1986666660

然后 owen 送给 dave 500500 元钱。

davelauraowenvickamr
30266-434660

再然后 amr 拿出 150150 元钱,送给 vick 和 owen。

davelauraowenvickamr
30266-359141-150

laura 嘴上说要送 amr 和 vick,其实一分钱都没准备,vick 压根没想送给任何人钱,因此不产生任何影响。

那么最终每个人的净损益值即为:

davelauraowenvickamr
30266-359141-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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值