13057 - 1.1.2 Greedy Gift Givers 贪婪的礼物送礼者
时间限制 : 1 秒
内存限制 : 128 MB
一群朋友准备互送礼物,你需要确定每个人收到的钱比送出的钱多多少(即净收益)。
每个人都会准备一些钱来送礼物,这些钱会被平均分给所有他指定的接收者。如果钱无法平均分配,剩余的零钱(不够平分给所有人的部分)由送礼者自己保留。
已知:
- 每个人的名字互不相同,且长度不超过 14 个字符。
- 每个人会列出自己要送礼的对象名单。
- 所有金额均为整数。
你需要计算每个人的净收益(收到的钱减去送出的钱),并按照输入时名字的顺序输出。
输入
第一行:一个整数 NP(2 ≤ NP ≤ 10),表示人数。
接下来 NP 行:每行一个名字,表示组里的所有人。
接下来是 NP 个段落,每个段落描述一个人的送礼情况,顺序与名字输入顺序不一定相同,但每个段落的第一行是一个名字(表示送礼者)。
每个段落的格式如下:
- 第一行:送礼者的名字(一定在之前输入的名字列表中)。
- 第二行:两个整数
money和num,money表示这个人准备用来送礼的总金额(0 ≤ money ≤ 2000),num表示他将送礼的对象人数(0 ≤ num ≤ NP-1)。 - 如果
num > 0,接下来有num行,每行一个名字,表示接收者的名字(都在名字列表中)。 - 如果
num = 0,则没有后续行,直接进入下一个段落。
所有数据确保格式正确,不会出现接收者名字不在列表中的情况。
输出
输出 NP 行,每行包含一个名字和一个整数,中间用一个空格隔开。
名字顺序必须与输入时第 2 行到第 NP+1 行的顺序完全一致。
整数表示该人的净收益(收到的钱 − 送出的钱)。
样例
输入
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
提示
样例说明
dave有 200 元,分给 3 个人(laura, owen, vick),每人得 200/3 = 66 元,余 2 元自己保留。送出 198 元,收到 500(来自 owen) + 0 = 500 元,净收益 = 500 - 198 = 302。laura有 0 元,分给 2 人(amr, vick),每人得 0 元,送出 0 元,收到 66(来自 dave) = 66 元,净收益 = 66。owen有 500 元,分给 1 人(dave),送出 500 元,收到 66(来自 dave) + 75(来自 amr) = 141 元,净收益 = 141 - 500 = -359。vick有 0 元,分给 0 人,送出 0 元,收到 66(来自 dave) + 75(来自 amr) + 0(来自 laura) = 141 元,净收益 = 141。amr有 150 元,分给 2 人(vick, owen),每人得 75 元,送出 150 元,收到 0(来自 laura) = 0 元,净收益 = -150。
数据范围与约定
NP:2 到 10。- 名字长度:不超过 14 个字符。
- 金额:
0 ≤ money ≤ 2000。 - 接收者人数:
0 ≤ num ≤ NP-1。 - 所有金额均为整数。
来源
USACO