#P1295. I hate SPAM, but some people love it
I hate SPAM, but some people love it
描述
如今,不幸的是,垃圾邮件正变得越来越常见。其中一些垃圾邮件可能具有倍增效应,因为它们要求你将其转发给所有朋友。有些垃圾邮件送上好运,有些垃圾邮件承诺你会变得富有,还有些垃圾邮件只是提醒你,告诉朋友你在乎这份友谊是多么重要。以下是一个垃圾邮件的示例:
发件人:爱丽丝
收件人:鲍勃,玛丽,朱莉娅,保罗
嗨,这是一封好运邮件。我希望你成为百万富翁,但这取决于你。如果你
* 将此邮件转发给 10 个或更多人,你将成为百万富翁
* 将此邮件转发给 5 个或更多人,你将变得富有
* 将此邮件转发给少于 5 个人,你将变得贫穷
正如我所说,这取决于你。撰写你的邮件并变得富有!:-)
爱丽丝
当人们收到垃圾邮件时,通常有两种不同的反应:
- 他们甚至不读就立即丢弃该消息(他们讨厌垃圾邮件);
- 他们将消息转发给他们认识的每个人(他们喜欢垃圾邮件)。
对于这个问题,我们假设每个人都喜欢垃圾邮件,但一个人永远不会转发相同的消息两次。每个垃圾邮件根据你转发消息的朋友数量会产生不同的效果。例如:一个垃圾邮件可能会说,如果你将消息转发给 5 个朋友,你会变穷;如果你转发给 10 个朋友,你会变得富有;如果你转发给 20 个朋友,你会成为世界上最富有的人,等等。
我们将只考虑与上述示例类似的垃圾邮件。更具体地说,一个垃圾邮件将定义两个阈值 和 以及三个属性 , 和 。一个人根据为该特定垃圾邮件转发的消息数量获得三个属性之一。如果一个人转发 条消息,且 ,那么他/她的属性是 ;如果 ,那么他/她的属性是 ;否则他/她的属性是 。
你将得到一组人的名字,并且对于组中的每个人,会得到他/她认识的朋友的电子邮件地址集合。你还将得到一组不同的垃圾邮件,对于每个垃圾邮件,会得到它的阈值以及属性,还有关于哪个是垃圾邮件发起人的信息。
你必须编写一个程序,根据每个人转发的所有垃圾邮件,确定给定组中每个人获得的属性。
你可以假设垃圾邮件的发起人至少有一个朋友(换句话说,他/她将至少发送一条消息),并且一个人不会给自己发送消息。
输入
你的程序应该处理多个测试用例。每个测试用例的第一行包含一个整数 ,表示组中的人数()。在输入中,一个人由 1 到 的整数标识。接下来的 行每行包含每个人的朋友列表(第 行包含第 个人的朋友列表)。第 个人的朋友列表描述了第 个人知道其电子邮件地址的朋友,由一个整数列表 (,)组成,并以值 0(零)终止。朋友列表之后是垃圾邮件的描述(最多有 100 条消息)。每个描述出现在不同的行。描述由一个标识垃圾邮件发起人的整数 ()、两个表示阈值的整数 和 以及三个属性 , 和 (每个属性是不超过 20 个字母的单词)组成。垃圾邮件列表以仅包含值 0(零)的一行结束。接下来的 行每行包含一个名字,每个名字是不超过 20 个字母的单个单词。第 行的名字是第 个人的名字。当 时,表示输入结束。
输出
对于每个测试用例,你的程序应该输出一个名字列表,后面跟着他们获得的属性。你的程序应该按照输入中出现的顺序写出人的名字,后面跟着 :
和一个空格,再后面是根据他们发送的垃圾邮件得到的属性。属性应该按照输入中出现的顺序写出;每个属性后面应该跟着一个空格。
示例输入
5
2 3 0
1 3 5 4 0
5 0
0
4 1 0
1 2 4 poor rich millionaire
5 3 10 sad normal happy
0
Bob
Paul
Mary
Alice
Julia
6
2 0
1 3 0
1 2 4 0
1 2 3 5 0
1 2 3 4 0
1 3 4 0
1 2 4 red green blue
1 2 4 dumb normal smart
6 3 5 ugly bad good
0
Peter
Paul
Victoria
John
Julia
Anne
0 0
示例输出
Bob: rich sad
Paul: millionaire normal
Mary: poor sad
Alice: poor sad
Julia: rich sad
Peter: red dumb ugly
Paul: green normal ugly
Victoria: green normal bad
John: blue smart bad
Julia: blue smart bad
Anne: red dumb bad
来源
2002 年南美洲竞赛