OIBH 信息学练习赛 #2
(竞赛用时:3小时)

题一  字符串的序号

问题描述
字符串 acab 含有两个 a ,一个 b ,一个 c ,和 acab 含的字母和每个字母的个数都相等的字符串还有:aacb,baca等,因为他们也是含有两个 a ,一个 b ,一个 c 。所有满足这个性质的字符串按字典顺序排列后,acab 是第 5 个,我们就说 acab 的序号是 5 .再如:ba 的序号是 2,aa 的序号是 1.编程求出给定字符串 S(长度<=100) 的序号 P(保证<=30000)注意:字符串只含小写字母。

输入:
S
输出:
P

样例
输入: 
acab

输出:
5

题二 尔虞我诈

问题描述
曾经有一个颇为流行的小游戏,名称已无法考证,我们姑且把它叫做“尔虞我诈”。游戏规则是这样的:有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
 

题三 猫和老鼠

问题描述
猫和老鼠在10*10的方格中运动,例如:
*...*.....
......*...
...*...*..
..........
...*.C....
*.....*...
...*......
..M......*
...*.*....
.*.*......

C=猫(CAT)
M=老鼠(MOUSE)
*=障碍物
.=空地

猫和老鼠每秒中走一格,如果在某一秒末他们在同一格中,我们称他们“相遇”。
注意,“对穿”是不算相遇的。猫和老鼠的移动方式相同:平时沿直线走,下一步如果会走到障碍物上去或者出界,就用1秒的时间做一个右转90度。一开始他们都面向北方。
编程计算多少秒以后他们相遇。

输入:10行,格式如上
输出:相遇时间T。如果无解,输出-1。

样例
输入:
*...*.....
......*...
...*...*..
..........
...*.C....
*.....*...
...*......
..M......*
...*.*....
.*.*......

输出:
49

信息学初学者之家 http://oibh.ioiforum.org/