JNOJ 送礼

来源:互联网 发布:java房屋租赁系统论文 编辑:程序博客网 时间:2024/04/28 23:35

1121: Greedy Gift Givers 贪婪的送礼者

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 64  Solved: 17
[Submit][Status][Web Board]

Description

对于一群要互送礼物的朋友,你要确定每个人送出的礼物比收到的多多少(and vice versa for
those who view gift giving with cynicism).
在这一个问题中,每个人都准备了一些钱来送礼物,而这些钱将会被平均分给那些将收到他的礼物
的人.
然而,在任何一群朋友中,有些人将送出较多的礼物(可能是因为有较多的朋友),有些人有准备了较
多的钱.
给出一群朋友, 没有人的名字会长于 14 字符,给出每个人将花在送礼上的钱,和将收到他的礼物
的人的列表,
请确定每个人收到的比送出的钱多的数目.
(可能有多组数据)

Input

第 1 行:人数NP,2<= NP<=10
第 2 到 NP+1 行:这NP 个在组里人的名字 一个名字一行
第NP+2 到最后:这里的NP 段内容是这样组织的:
第一行是将会送出礼物人的名字.
第二行包含二个数字: 第一个是原有的钱的数目(在0 到2000 的范围里),第二个NGi 是将收到
这个送礼者礼物的人的个数 如果 NGi 是非零的, 在下面 NGi 行列出礼物的接受者的名字,一个
名字一行.
SAMPLE

Output

输出 NP 行
每行是一个的名字加上空格再加上收到的比送出的钱多的数目.
对于每一个人,他名字的打印顺序应和他在输入的2 到NP+1 行中输入的顺序相同.所有的送礼的钱
都是整数.
每个人把相同数目的钱给每位要送礼的朋友,而且尽可能多给,不能给出的钱被送礼者自己保留.

Sample Input

5davelauraowenvickamrdave200 3lauraowenvickowen500 1daveamr150 2vickowenlaura60 2amrvickvick0 0

Sample Output

dave 302laura 66owen -359vick 141amr -150

HINT

Source

USACO



#include<cstdio>#include<cstring>#include<algorithm>using namespace std;char aman[15];struct Person{char name[15];int money;}per[10];int main(){int pernum=0,i=0,j=0,money,getnum,getmoney,k,m;scanf("%d",&pernum);for(i=0;i<pernum;i++){scanf("%s",per[i].name);per[i].money=0;}for(i=0;i<pernum;i++){scanf("%s",aman);for(j=0;j<pernum;j++){if(!strcmp(per[j].name,aman)){scanf("%d%d",&money,&getnum);if(getnum==0)continue;getmoney=money/getnum;money=money-getnum*getmoney;per[j].money-=getnum*getmoney;for(k=0;k<getnum;k++){scanf("%s",aman);//printf("%s will get money\n",aman);for(m=0;m<pernum;m++){if(!strcmp(per[m].name,aman)){per[m].money+=getmoney;//printf("%s give %s %d money\n",per[j].name,per[m].name,getmoney);break;}}}break;}}}for(i=0;i<pernum;i++){printf("%s %d\n",per[i].name,per[i].money);}}

1 0