[codeforces156B]猜测
来源:互联网 发布:网上买车险软件 编辑:程序博客网 时间:2024/06/08 04:29
大概题意:有m个人说真话 一共n个人 每个人都会指认别人是不是凶手 问哪些人说真话哪些人说假话
这个题还是相当好玩的逻辑题 不过代码细节很恶心……
我们假设一共有sum句话是指认某些人不是的,那么假设对于某一个人【可能】是的话,那么必然会是sum-no[i](指认他不是的)(前两项的和是指认所有别人不是的)+yes[i](指认他是的)==m 这样这个人才有可能是
那么每次我们记录一下
最后输出的时候 假如所有情况已经确定直接输出 否则not define
细节1:无论如何假如一个人指认的确实不是犯人,输出LIE
细节2:无论如何他指认确实不是犯人,输出truth
其实感觉就是取了个非……
#include<cstdio>#include<iostream>#include<algorithm>#include<cmath>#include<cstring>#include<cstdlib>using namespace std;int n,m;int is[100001],isnot[100001];int pointat[100001];int sum=0;inline int init(){int ju=1,now=0;char c;bool flag=false;while(1){c=getchar();if(c=='-')ju=-1;else if(c>='0'&&c<='9'){now=now*10+c-'0';flag=true;}else if(flag)return ju*now;}}bool iscri[100001];int main(){int cnt=0;int x;scanf("%d %d",&n,&m);for(int i=1;i<=n;i++){x=init();pointat[i]=x;if(x>0)is[x]++;else {isnot[-x]++;++sum;}}for(int i=1;i<=n;i++){if(sum-isnot[i]+is[i]==m){++cnt;iscri[i]=true;//假如这个人是犯人不违反规则 }}for(int i=1;i<=n;i++){if(pointat[i]>0){ if(!iscri[pointat[i]]) {printf("Lie\n");//假如无论如何那个人确实不是犯人 } else { if(cnt==1)printf("Truth\n");//假如关系已定 他说的队 else printf("Not defined\n"); }}else{if(iscri[-pointat[i]]){if(cnt!=1)printf("Not defined\n");//同理 else printf("Lie\n");}else{printf("Truth\n");}}}return 0;}
0 0
- [codeforces156B]猜测
- CodeForces156B Suspects
- 哥德巴赫猜测
- 猜测扑克牌
- 猜测首府
- 猜测价格
- 猜测多项式
- 猜测输入文件格式
- smtp暴力猜测脚本
- 关于Meltemi的猜测
- Java RMI猜测
- index 损坏问题猜测
- 【STL】remove算法猜测
- greenlet switch原理猜测
- 账号安全登录猜测
- 杀人猜测游戏
- 哥德巴赫曾猜测
- js算法--猜测随机数
- CentOS7使用手册
- ubuntu同步网络时间
- 终端打印+读取+基本运算(小总结)
- 由char a[]={‘你‘,‘海’,‘林’};cout<<a[1]牵扯到的
- Java基本点
- [codeforces156B]猜测
- android studio svn分享时的忽略文件
- mysql int(3)与int(11)的区别
- getsockname函数使用
- Java Annotation 总结
- C++ —— C++运算符与表达式
- Android之播放器的恢复
- 分布式事务
- 高通骁龙410C开发板基础知识