2006百度之星程序设计比赛复赛试题

1.另类杀人游戏

周末的晚上,百度的员工们总喜欢聚集在公司的会议室玩杀人游戏。从1警1匪到n警n匪,他们尝试了几乎所有流行的杀人游戏规则。终于有一天,连最热衷杀人游戏的“杀人不眨眼”的Austin也开始对无休止的辩论感到厌烦。于是,他决定改变他的一贯作风,他开始变成了一个“杀人不睁眼”的杀手。

如何做到“杀人不睁眼”呢?Austin早已构思好他的杀人计划:

   1. N个人(包括Austin)坐成一圈玩杀人游戏,按顺时针编号 1 2 3 4 ... ...
   2. Austin从1号开始顺时针开始数到第m号就杀掉第一个人,被杀掉的人要退出游戏。
   3. 如果第m个人恰好是Austin自己,他就杀掉他顺时针方向的下一个人。
   4. Austin从被杀的人的下一个顺时针数m个人,把第m个杀掉。
   5. 重复2-4,直至杀掉所有人。

Austin 把这个杀人计谋告诉了法官小k,他便可以闭起眼睛杀人啦。作为一个正直善良的法官,小k当然不能让残忍的Austin得逞,于是,她偷偷把Austin的杀人计划告诉了作为警察的你,聪明的百度之星。现在,你的任务是活到最后,与“杀人不睁眼”的Austin对决。

输入要求:
第一个行包含一个整数K,表示有K组测试数据。 对于每组测试数据三个整数:
N,M,T,(3<=N<=10000,1<=M,T<=10000)
分别表示参与游戏的人数,Austin每隔M个人会杀掉一人,Austin初始位置的标号。

输入样例:
2
7 4 1
7 4 1

输出要求:
每个测试数据输出一个整数。
你需要选择的初始位置的序号,以确保最后剩下的两个人是你与Austin。

输出样例:
5
5
例子说明:杀人顺序为4 2 7 6 3 5 , 所以5 是你要选择的位置。

2.空中飞猴

马戏团里新来了一只很特别的小猴子皮皮,皮皮不仅长得漂亮,还很聪明。自从它来到马戏团之后,“空中飞猴”成了马戏团里的保留节目,慕名观看的人络绎不绝。 “空中飞猴”表演开始时,空中架着两根长长的钢丝。皮皮在其中一根上,它的目标是到达另一个根钢丝上。皮皮必须在爬行一定距离后纵身一跃,直接跳到另一根钢丝的某个位置。由于皮皮的速度非常快,它的运动轨迹可以近似的看成一条直线段。为了不让自己太危险,皮皮希望自己的跳跃距离尽量短,而为了不让观众等得太不耐烦,它在钢丝上的爬行距离不能超过d。在爬行距离不超过d的情况下,皮皮的跳跃距离最短是多少?

输入要求:
输入文件包含多组测试数据。每组测试数据包含16个实数x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4,xp,yp,zp, d,表示两根钢丝分别为线段(x1,y1,z1)-(x2,y2,z2)和(x3,y3,z3)-(x4,y4,z4),皮皮的座标为(xp, yp, zp),最大爬行距离为d。皮皮保证在第一条钢丝上,保证每条钢丝长度大于零。但两条钢丝有可能相交甚至重叠。

输入样例:

0.0 0.0 0.0 4.0 4.0 0.0 4.0 0.0 1.0 0.0 4.0 1.0 2.0 2.0 0.0 10.0

输出要求:
每组测试数据输出一行,仅包含一个非负实数,四舍五入保留三位小数,即最短跳跃距离。

输出样例:

1.000

3.星球大战

公元4046年,人类科学高度发达,绝大部分人都已经移居至浩瀚的宇宙,在上千颗可居住的星球上留下了人类的印记。然而,此时人类却分裂成了两个联盟:正义联盟和邪恶联盟。两个联盟之间仇恨难解,时有战争。

现在,邪恶联盟通过不正当贸易积聚了大量宇宙财富。因此,正义联盟计划要破坏邪恶联盟的非法贸易网络,从而影响邪恶联盟的经济状况,为下一次战争作好准备。邪恶联盟由数百颗星球组成,贸易通过星球间的运输航道来完成。一条运输航道是双向的且仅连接两个星球,但两个星球之间可以有多条航道,也可能没有。两个星球之间只要有运输航道直接或间接的相连就可以进行贸易。正义联盟计划破坏邪恶联盟中的一些运输航道,使得邪恶联盟的星球分成两部分,任一部分的星球都不能与另一部分的星球进行贸易。但是为了节省破坏行动所需的开支,正义联盟希望破坏尽量少的运输航道来达成目标。请问正义联盟最少需要破坏多少条运输航道呢?

输入要求:
输入文件包含多组测试数据。每组测试数据第一行为两个整数N和M(2≤N≤500,0≤M≤N(N-1)/2),N为邪恶联盟中星球的数量。接下来M行,每行三个整数A、B和C(0≤A,B<N,A≠B,C>0),表示星球A和星球B之间有C条运输航道。运输航道的总数量不超过10^8。

输入样例:

3 3
0 1 1
1 2 1
2 0 1
4 3
0 1 1
1 2 1
2 3 1
8 14
0 1 1
0 2 1
0 3 1
1 2 1
1 3 1
2 3 1
4 5 1
4 6 1
4 7 1
5 6 1
5 7 1
6 7 1
4 0 1
7 3 1

输出要求:
每组测试数据输出一行,包含一个整数,表示需要破坏的运输航道的数量。
如果输入的贸易网络本来就是不连通的,则输出0。

输出样例:

2
1
2

4.X博士的彩球游戏

X博士是一个研究儿童智力开发方法的科学家,他为幼儿教育领域做出了许多贡献。最近,X博士正在研究一种适合儿童的游戏,用以辅助发展儿童的观察力、注意力和思维能力。经过连日的构思,X博士终于设计出了一种游戏:彩球游戏。

彩球游戏是一种单人参与的游戏,游戏首先给出一串由许多不同颜色的小球组成的小球序列,以及一个整数参数M(M≥2)。一段连续的具有相同颜色的小球序列称为连续同色序列。小孩,即游戏参与者,每次可以向任意一段连续同色序列插入一个同色小球,使该序列的长度加一。当一段连续同色序列在插入一个同色小球后其长度达到M时,该序列就会爆炸消失,然后原序列两边的其余小球会重新连成一串,如果两段相同颜色的连续同色序列在此时连接在一起,它们就会合并形成一段新的连续同色序列。如果新形成的连续同色序列长度达到M,这段序列也会爆炸消失,然后重复上述过程,直到没有新的长度达到M的连续同色序列出现为止。游戏的目标很简单,就是插入尽量少的小球,使得所有小球都爆炸消失掉。

通过长时间的游戏和不断提高游戏水平,这个游戏可以很好地开发儿童的观察力、注意力和思维能力。但是X博士仍然面临着一个困难的问题,他还需要设计出一个游戏演示AI程序,可以以最优的方式(即插入的小球数量最小)进行游戏,用于游戏教学,或者在游戏中对小孩给出提示。X博士并不擅长此类程序,因而他无法完成这个任务,你可以帮助他吗?

输入要求:
输入文件包含多组测试数据。每组测试数据第一行为整数M(2≤M≤20),第二行为一条非空的字符串,由大写字母组成且长度不超过200,表示初始的一串小球,不同的字母表示不同的小球颜色。初始时可能会存在一些长度达到M的连续同色序列,但这些序列不会马上爆炸消失。

输入样例:
3
AAABAAA
3
ABBABBA
3
AAAABCCBBB

输出要求:
每组测试数据输出一行,表示至少需要插入多少次小球才能使所有小球爆炸消失掉。

输出样例:
2
2
2

 5.追捕

四个小孩正在花园里玩追捕游戏。一个小孩扮演逃亡者,其余三个小孩做追捕者。花园是一块由N行M列方格组成的草地,花园周围有木栏包围着,不能走出,花园里面还有一些障碍物不能够通过。游戏可以进行许多回合,每个回合分成两轮,第一轮追捕者可以进行追捕行动,第二轮逃亡者可以根据前一轮追捕者的行动开展逃亡旅程。在第一轮里,三个追捕者必须在三人中选择一个人向某个相邻的方格走一步,只有在三个人都没有可以走的相邻方格时,他们才允许选择停留在原地。在第二轮里,逃亡者也必须选择某个相邻的方格走一步,如果逃亡者没有任何可走的方格,那么逃亡者就被捕了。四个小孩都不允许走到有障碍物或其他人的方格上,也不能走出花园,因而,四个小孩总是会位于不同的方格上面。

这些小孩都是非常聪明的,三个追捕者也是团结一致的。追捕者如果有可以捉到逃亡者的方法,那么他们就一定不会错过。逃亡者如果有不被捕获的方法,那么他也不会犯错。除此之外,追捕者会希望尽快地捉到逃亡者,而逃亡者即使在会被捕获的情况下也会尽可能地拖延时间。给定花园的障碍物的分布图和四个小孩的初始位置,你知道追捕者有方法捉到逃亡者吗?如果有,他们要经过多少轮后才能捉到逃亡者呢?

输入要求:
输入文件包含多组测试数据。每组测试数据第一行为两个整数N和M(1≤N≤10,1≤M≤10),为花园方格阵列的行数和列数。接下来N行,每行M个字符,可以为“.”、“#”、“O”和“X”,分别表示空地、障碍物、追捕者和逃亡者。追捕者总是会有三个,而且四个小孩一开始也都会在空地上面。

输入样例:

2 2
OO
OX
3 3
OOO
##X
...
3 3
OO#
###
.OX
3 4
OO##
####
..OX
4 4
OOO.
....
....
...X
5 5
O...O
.....
..#..
.....
O...X
5 5
O...O
.....
...#.
.....
O...X
6 6
......
.O..O.
..##..
..##..
.O..X.
......
6 6
#.....
.O..O.
..##..
..##..
.O..X.
......
10 10
..........
..........
..O....O..
..........
..........
..........
..........
..O....X..
..........
..........
10 10
..........
.#.#.#.#.#
..O.....O.
.#.#.#.#.#
..........
.#.#.#.#.#
..........
.#.#.#.#.#
..O.....X.
.#.#.#.#.#

输出要求:
每组测试数据输出一行,若追捕者能够捉到逃亡者,则输出他们要经过多少轮后才能成功。轮数的计算包括追捕者和逃亡者进行行动的两轮,逃亡者被捕获的那一轮不算,因而结果总是一个奇数。具体输出格式请参考输出样例(请注意大小写)。

The escapee will be captured after 1 steps
The escapee will be captured after 7 steps
The escapee will be captured after 5 steps
The escapee will never be captured
The escapee will be captured after 21 steps
The escapee will never be captured
The escapee will be captured after 41 steps
The escapee will never be captured
The escapee will be captured after 39 steps
The escapee will never be captured
The escapee will be captured after 51 steps
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章