题目链接:http://poj.org/problem?id=2912

题目大意:n个人玩,玩石头剪刀布游戏,其中1人是裁判,剩下的n-1个人分为3组, 他们商量好了,相同组的人每次都出相同的手势,不同组的人是不同的,而裁判是随机出的。给出m个结果,判断那个是裁判。

解题思路:其实跟食物链差不多,也是分三组0、1、2,0吃1,1吃2,2吃0。裁判由于可以任意出,所以可能属于任意一个集合,所以有裁判参与的回合不考虑。所以要枚举0~n-1号选手,比如枚举到编号为x的选手时,就忽略跟x有关的信息,判断剩下的信息是否有矛盾,如果没有则sum+1。如果最后sum=0那么就是“Can not determine”;sum>1则是"Impossible";sum=1的话就输出是裁判的那个人,关于从第几个信息之后可以判断他是裁判,那就是剩下的人出问题的地方取最大值。因为只有否定了其它所有人,才能确定谁是裁判。

代码:

 #include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int N=1e4+; int root[N],val[N]; struct node{
int a,b,c;
}arr[N]; int find(int x){
if(root[x]==x)
return x;
int tmp=find(root[x]);
val[x]=(val[x]+val[root[x]])%;
return root[x]=tmp;
} int main(){
int n,m;
while(~scanf("%d%d",&n,&m)){
for(int i=;i<=m;i++){
char c;
scanf("%d%c%d",&arr[i].a,&c,&arr[i].b);
if(c=='=') arr[i].c=;
if(c=='<') arr[i].c=;
if(c=='>') arr[i].c=;
}
bool flag;
int line=,sum=,ans;
//枚举0~n-1
for(int i=;i<n;i++){
//初始化
memset(val,,sizeof(val));
for(int j=;j<n;j++)
root[j]=j;
flag=false; for(int j=;j<=m;j++){
int a=arr[j].a,b=arr[j].b,c=arr[j].c;
if(a==i||b==i)
continue;
int t1=find(a);
int t2=find(b);
if(t1==t2){
if((val[a]+c)%!=val[b]){
//所有出问题的地方取最大值
line=max(line,j);
flag=true;
break;
}
}
else{
root[t2]=t1;
val[t2]=(val[a]-val[b]+c+)%;
}
}
//没有矛盾
if(!flag){
sum++;
ans=i;
}
}
//判断sum的个数
if(sum==)
puts("Impossible");
else if(sum>)
puts("Can not determine");
else
printf("Player %d can be determined to be the judge after %d lines\n",ans,line);
}
return ;
}

最新文章

  1. 接口测试 postman
  2. jenkins, ant, pmd持续集成
  3. Android Actitity的生命周期
  4. Android驱动调试利器Busybox之初体验
  5. Windbg 常用命令整理
  6. 从模态视图push到另一个视图
  7. 在ubuntu16.04 下安装haproxy 1.5.11 做tcp负载均衡
  8. Asp.Net转换Html加号显示为空格的字符!(自已备用)
  9. struts2之动态方法调用(转)
  10. Hibernate实体对象继承策略
  11. [LeetCode] Max Consecutive Ones 最大连续1的个数
  12. 【转】Android调用Sqlite数据库时自动生成db-journal文件的原因
  13. piggy.lzo
  14. Ubuntu 12.04上安装Hadoop并运行
  15. VDOM总结
  16. Linux基础命令---cancel取消打印任务
  17. leetcode 486 预测赢家
  18. (转)Unity3D工程版本管理方案
  19. (笔记)linux增加非标波特率的方法
  20. Linux命令应用大词典-第1章 登录、退出、关机和重启

热门文章

  1. TYVJ2032 升降梯上
  2. HBase工具之监控Region的可用和读写延时状况
  3. 动态切换input的 disables 属性
  4. Anaconda创建python(2.7/3.6)的虚拟环境后需要添加ipykernel
  5. window10系统下使用python版本实现mysql查询
  6. iBATIS事务处理
  7. Spring实战第一部分总结
  8. [洛谷P2704] [NOI2001]炮兵阵地
  9. C# 如何用多字符分割字符串
  10. 在vsagent上运行.dll录制文件。