#UT112. [USACO1.1.2] 贪婪的礼物赠送者 Greedy Gift Givers
[USACO1.1.2] 贪婪的礼物赠送者 Greedy Gift Givers
贪婪的礼物赠送者
一组 NP(2 ≤ NP ≤ 10)具有唯一名称的朋友们决定交换金钱礼物。这些朋友中的每一个可能会或可能不会给其他朋友中的任何一个或所有人一些钱。 同样,每个朋友也可能会或可能不会从其他朋友那里收到钱。 在这个问题中,您的目标是推断每个人给的金额比收到的金额多多少。
赠送礼物的规则可能与您预期的不同。每个人会留出一笔金额来赠送,并将这笔钱均匀分配给他或她赠送礼物的所有人。没有可分割的金钱,因此将 3 元分给 2 个朋友将是每人 1 元,剩下 1 元——这 1 元留在赠送者的“账户”中。
在任何一组朋友中,有些人比其他人更大方(或至少可能有更多的熟人),而有些人则比其他人有更多的钱。
给定一组朋友,没有人姓名超过 14 个字符,组中每个人在礼物上的花费以及每个人赠送礼物的朋友的(子)名单,请确定组中每个人赠送的金额比收到的金额多(或少)多少。
重要提示
评分机是一个使用标准 Unix 约定的 Linux 机器:行末是一个常被称为 '\n' 的单个字符。这与 Windows 不同,后者以两个字符结束一行,即 '\n' 和 '\r'。不要让您的程序被这个困住!
程序名称:gift1
输入格式
- 第 1 行:一个单一整数 NP
- 第 2 行至 NP + 1 行:每行包含一位组员的名字
- 第 NP + 2 行至结束:NP 组的行,以如下方式组织:
- 组中的第一行告诉您将赠送礼物的人的名字。
- 组中的第二行包含两个数字:将被分配用于礼物的初始金额(范围为 0 到 2000)以及将赠送礼物的人的数量 NGi(0 ≤ NGi ≤ NP-1)。
- 如果 NGi 非零,则接下来的 NGi 行列出每位礼物接收者的名字。
示例输入(文件 gift1.in)
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
输出格式
输出 NP 行,每行包括一个人的名字,后面跟一个空格和该人的净增益或亏损(final_money_value - initial_money_value)。姓名应以它们出现在输入第 2 行时的顺序打印。
所有礼物都是整数。每个人将相同金额的金钱作为礼物赠送给任何接收者,并尽可能多地满足这一约束。任何未赠送的钱都由赠送者保留。
示例输出(文件 gift1.out)
dave 302
laura 66
owen -359
vick 141
amr -150
Related
In following homework: