2006年百度之星程序设计大赛试题初赛题目-题4-剪刀石头布

个小孩正在和你玩一种剪刀石头布游戏。 个小孩中有一个是裁判,其余小孩分成三组(不排除某些组没有任何成员的可能性),但是你不知道谁是裁判,也不知道小孩们的分组情况。然后,小孩们开始玩剪刀石头布游戏,一共玩 次,每次任意选择两个小孩进行一轮,你会被告知结果,即两个小孩的胜负情况,然而你不会得知小孩具体出的是剪刀、石头还是布。已知各组的小孩分别只会出一种手势(因而同一组的两个小孩总会是和局),而裁判则每次都会随便选择出一种手势,因此没有人会知道裁判到底会出什么。请你在 次剪刀石头布游戏结束后,猜猜谁是裁判。如果你能猜出谁是裁判,请说明最早在第几次游戏结束后你就能够确定谁是裁判。 

输入格式: 

输入文件包含多组测试数据。每组测试数据第一行为两个整数 和 ( 1 ≤ N ≤ 500 , 0 ≤ M ≤ 2000 ),分别为小孩的个数和剪刀石头布游戏进行的次数。接下来 行,每行两个整数且中间以一个符号隔开。两个整数分别为进行游戏的两个小孩各自的编号,为小于 的非负整数。符号的可能值为“ = ”“ > ”“ < ”,分别表示和局、第一个小孩胜和第二个小孩胜三种情况。 

输出格式: 

每组测试数据输出一行,若能猜出谁是裁判,则输出身为裁判的小孩的编号,并输出在第几次游戏结束后就能够确定谁是裁判。如果无法确定谁是裁判,或者发现剪刀石头布游戏的胜负情况不合理(即无论谁是裁判都会出现矛盾),则输出相应的信息。具体输出格式请参考输出样例。 

输入样例: 

3 3 

0<1 

1<2 

2<0 

3 5 

0<1 

0>1 

1<2 

1>2 

0<2 

4 4 

0<1 

0>1 

2<3 

2>3 

1 0 

输出样例: 

Can not determine 

Player 1 can be determined to be the judge after 4 lines 

Impossible 

Player 0 can be determined to be the judge after 0 lines 

说明: 

共有 个测试数据集,每个测试数据集为一个输入文件,包含多组测试数据。每个测试数据集从易到难分别为 、 10 、 15 、 30 和 40 分,对每个测试数据集分别执行一次程序,每次必须在运行时限 秒内结束程序并输出正确的答案才能得分。 

所有数据均从标准输入设备( stdin/cin )读入,并写出到标准输出设备 ( stdout/cout )中。 

五个测试数据集中输入 分别不大于 20 、 50 、 100 、 200 和 500 ,各有 10 组测试数据。


my answer:

没想到解法,在网上看到一个解题思路:

存放枚举这children个孩子做裁判,对于每个孩子进行并查集的归并查找操作后第一次所发生矛盾的语句数,而且一旦矛盾则说明当前枚举的这个孩子是不可能做裁判的http://www.diybl.com/course/3_program/c++/cppjs/2008510/115243.html

我也尝试用枚举来做,只能区分"Can not determine"、"Impossible"和哪个小孩是裁判,但是计算不出是在哪条语句知道确定裁判。


转载于:https://www.cnblogs.com/windmissing/archive/2012/05/18/2559827.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值