JNOJ 送礼

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

5
dave
laura
owen
vick
amr
dave
200 3
laura
owen
vick
owen
500 1
dave
amr
150 2
vick
owen
laura
6
0 2
amr
vick
vick
0 0

Sample Output

dave 302
laura 66
owen -359
vick 141
amr -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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值