题目名称 235. [POI 1999] 步兵问题
输入输出 mus.in/out
难度等级 ★★
时间限制 1000 ms (1 s)
内存限制 128 MiB
测试数据 20
题目来源 GravatarBYVoid 于2008-12-10加入
开放分组 全部用户
提交状态
分类标签
动态规划
分享题解
通过:18, 提交:32, 通过率:56.25%
Gravatarlingyixiaoyao 100 0.011 s 0.56 MiB C++
GravatarBYVoid 100 0.016 s 0.34 MiB C++
Gravatarcstdio 100 0.016 s 0.39 MiB C++
GravatarBYVoid 100 0.017 s 0.34 MiB C++
Gravatarlbn187 100 0.017 s 0.54 MiB C++
Gravatarybh 100 0.018 s 0.16 MiB Pascal
Gravatar稠翼 100 0.019 s 0.26 MiB Pascal
Gravatarreamb 100 0.021 s 0.17 MiB Pascal
GravatarQhelDIV 100 0.027 s 3.34 MiB C++
Gravatarlingyixiaoyao 100 0.030 s 0.53 MiB C++
关于 步兵问题 的近10条评论(全部评论)
mark
Gravatarmikumikumi
2015-09-10 16:25 2楼
把链延长一倍就可以同时表示正着和倒着的情况
Gravatarcstdio
2014-01-24 17:30 1楼

235. [POI 1999] 步兵问题

★★   输入文件:mus.in   输出文件:mus.out   简单对比
时间限制:1 s   内存限制:128 MiB

在Louis三世和他的重臣-红衣主教Richelieu时期的一个旅馆里n个步兵正在大口的吃肉喝酒。由于喝个不停,因此步兵们热心于吵架。一场喝醉了酒的争吵爆发了,每个步兵都谩骂着对方。

决斗是不可避免的。但是谁应该以什么顺序去打谁?他们决定(第一个回合来自他们的共同争吵)他们围成一圈按顺序选出一些人。被选出的士兵和他右边相邻的人打斗。失败的人离开游戏,为了更加精确,他的尸体将被仆人拖走。下一个步兵将站在失败者的旁边成为胜利者的邻居。

一些年后,当历史学家读了胜利者的记录后,他们意识到最终胜利的结果依靠一个按决斗顺序展开的圆环。他们注意到一个栅栏练习表明,谁靠着谁 能赢得一场决斗。它表现在(用数学语言)“A赢B”的关系不是及物的!步兵A比B打的更好,B比C更好,C比A更好是有可能的。当然,他们三个当中的首场 决斗影响了最后的结果。如果A和B先打,那么C最终会赢。但是如果B和C先打,那么A就最终会赢。历史学家被他们的发现感到入迷,决定去核实那么步兵能够 生存。法国的命运和整个文明的欧洲真正依靠这个!

任务

N个人以从1到n的连贯数字站成一行。他们要决斗n-1次。在第一个回合这些人中的一个(编号为I)打他右边的邻居,也就是编号为 I+1(如果I=n,则要打的人为编号为1的)。一个失败者离开游戏,圆环收缩以至下一个人能成为胜利者的邻居。我们被给出可能的决斗结果的表,用一个矩 阵形式。如果Ai,j = 1,那么编号为I的人总是战胜编号为j的人。如果Ai,j = 0,那么编号为I的人输给编号为j的人。如果存在一系列n-1的图,我们说编号为k的人赢得了这个游戏,赢得了最终的决斗。

写一个程序:

从文件读取矩阵A, 计算可能赢得比赛的人的编号, 把结果写到文件

输入

在文件的首行有一个整数n(满足不等式3<=n<=100)被记录。在接下来的n行的每一行里将出现有0或1组成的n位的字符 串。一个第I行第j列的数字表示Ai,j 。当然,对于i<>j ,Ai,j = 1 - Aj,i 。对于每一个I,Ai,i = 1。

输出

在输入文件的首行,应该写下m-可能赢得这个游戏的人数。在接下来的m行里,这些人的编号应该被按照升序记录,每一行一个。

样例输入  

7
1111101
0101100
0111111
0001101
0000101
1101111
0100001

样例输出  

3
1
3
6

备注

决斗顺序:1-2,1-3, 5-6, 7-1, 4-6, 6-1 得到最后胜利的是编号为6的人。你也能检查仅有两个人(1和3)更有可能赢得这个游戏。