1339: 尔虞我诈
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:0
解决:0
题目描述
曾经有一个颇为流行的小游戏,名称已无法考证,我们姑且把它叫做“尔虞我诈”。
游戏规则是这样的:
有N人参加比赛,每两人进行一场游戏(因此共进行N*(N-1)/2场游戏),每场游戏分十轮,在每轮中,两人同时说出“TRADE”和“CHEAT”其中之一,如果两人都“TRADE”,各得一分,如果两人都“CHEAT”,各扣一分,如果一个“TRADE”,一个“CHEAT”,则CHEAT的那个人得2分,TRADE的扣2分。每人得的N-1场分数的总和为该人的最后得分,看谁的得分最高。当然,在比赛之前每人的得分为0。
如何才能取胜呢?人们设计了很多战术,可以用以下的“战术语言”来描述:
<program> ::= <statement>.
<statement> ::= <command> | <ifstat>
<ifstat> ::= IF <condition> THEN <statement> ELSE <statement>
<condition> ::= <cond> | <cond> <op> <condition>
<op> ::= AND | OR
<cond> ::= <memory> {= | #} {<command> | NULL}
<memory> ::= {MY | YOUR} LAST {1 | 2}
<command> ::= TRADE | CHEAT
#的意思是“不等于”,NULL的意思是空,不存在。
空格可以在任何地方出现。
例如:
CHEAT.
和
IFYOURLAST2=NULLTHENTRADEELSEIFYOURLAST1=TRADETHENTRADEELSECHEAT.
是两个合法的战术语言程序。
编程模拟给定程序间的游戏情况。
输入
第一行,N(<=10),以下 N 行,每一行为一个程序(长度<=255)
输出
共 1 行,有 N 个整数,分别为各程序的最后得分。
样例输入 复制
3
CHEAT.
IF MY LAST1 = CHEAT THEN TRADE ELSE CHEAT.
IFYOURLAST2=NULLTHENTRADEELSEIFYOURLAST1=TRADETHENTRADEELSECHEAT.
样例输出 复制
1 -12 -13