Problem Description

福尔摩斯是个大侦探,他总是在解决疑难案件。这一次的案件也不例外,案件是这样的:有编号为1到N的N位嫌疑犯,他们其中有一个犯了罪,然后每个嫌疑犯都被询问,“哪一个人犯了罪?”犯罪嫌疑人的答案只能“编号ai的嫌疑犯犯了罪”或者“编号ai的嫌疑犯没有犯罪”。当然嫌疑犯也可以说他自己(ai = i).

福尔摩斯凭着他敏锐的侦探直觉,确定地对华生说,只有M个人说了真话,其余人都是说谎。然后就没有然后了,但华生却想知道哪些人说谎哪些人又是讲真话。这个时候同样聪明的你,被誉为红旗下的名侦探是否愿意秀一下自己的侦探天赋,帮助可怜的华生嘛?

 Input

第一行一个整数T(1 <= T <= 10),表示测试数据的组数。

每组数据第一行包含N(1 <= N <=10^5)和M(0 <= M <= N)两个整数,含义见题面。接下来N行,第i行是一个整数+ai或者-ai(1<= ai <= N),如果是+ai,代表第i个人说编号ai犯了罪,如果是-ai,则表示编号ai没有犯罪。

输入数据保证至少存在一个人,使得如果是他犯了罪,则恰好有 M 个人说了真话。

 Output

输出为N行,第i行是第i个嫌疑犯的输出。如果第i个嫌疑犯说了是真话,输出“Truth”;如果说谎,则输出“Lie”,如果不确定,则输出“Not defined”。

 Sample Input

23 2-1-2-34 1+2-3+4-1

Sample Output

Not defined Not defined Not defined Lie Not defined Lie Not defined

 Source

FOJ有奖月赛-2015年10月

这一题是推理题,主要是要弄清楚什么时候说真话,假话和不确定。对于n个人我们可以依次假设其是嫌犯,那么我们可以通过说假话的人数是不是等于m判断这个人是不是可能是嫌疑犯,那么我们就能知道哪些人可能是嫌犯。然后分两种情况分类讨论,第一种是只有一个嫌犯的时候,那么每人说的是真是假就能判断出来了;第二种是有多个嫌犯,那么除了两种情况外,都不能判断说的是真话还是假话,这两种情况是:如果这个人不可能是嫌犯,那么说他是嫌犯的人一定是说假话,说他不是嫌犯的人一定是真话。
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<algorithm>
using namespace std;
#define ll long long
#define inf 0x7fffffff
#define maxn 100050 int cot1[maxn],cot2[maxn];
int ans[maxn],a[maxn];
int num1[maxn],num2[maxn];
struct node{
int to,next;
}e1[maxn];
int first1[maxn]; struct node1{
int to,next;
}e2[maxn];
int first2[maxn]; int main()
{
int n,m,i,j,T,t,sum2,v,tot1,tot2,k;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
memset(first1,-1,sizeof(first1));
memset(first2,-1,sizeof(first2));
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));
memset(cot1,0,sizeof(cot1));
tot1=tot2=0;
sum2=0;
for(i=1;i<=n;i++){
ans[i]=2;
int x;
scanf("%d",&x);
t=abs(x);
if(x<0){
sum2++;
tot2++;
e2[tot2].next=first2[t];e2[tot2].to=i;
first2[t]=tot2;
num2[t]++;
}
else{
tot1++;
e1[tot1].next=first1[t];e1[tot1].to=i;
first1[t]=tot1; num1[t]++;
}
}
if(m==0){
for(i=1;i<=n;i++){
printf("Lie\n");
}
continue;
}
if(m==n){
for(i=1;i<=n;i++){
printf("Truth\n");
}
continue;
} int tot=0;
for(i=1;i<=n;i++){
int sum=num1[i]+sum2-num2[i];
if(sum==m){
tot++;
cot1[i]++;
}
} if(tot==1){
for(i=1;i<=n;i++){
if(cot1[i]){
for(k=first1[i];k!=-1;k=e1[k].next){
ans[e1[k].to ]=1;
}
for(k=first2[i];k!=-1;k=e2[k].next){
ans[e2[k].to ]=0;
} }
else{
for(k=first1[i];k!=-1;k=e1[k].next){
ans[e1[k].to ]=0;
}
for(k=first2[i];k!=-1;k=e2[k].next){
ans[e2[k].to ]=1;
}
} } }
else{
for(i=1;i<=n;i++){
if(cot1[i]){
continue;
}
else{
for(k=first1[i];k!=-1;k=e1[k].next){
ans[e1[k].to ]=0;
}
for(k=first2[i];k!=-1;k=e2[k].next){
ans[e2[k].to ]=1;
}
} } }
for(i=1;i<=n;i++){
if(ans[i]==0)printf("Lie\n");
else if(ans[i]==1)printf("Truth\n");
else printf("Not defined\n");
}
}
return 0;
}

fzu2202 犯罪嫌疑人的更多相关文章

  1. FZU 2202——犯罪嫌疑人——————【思维题】

    犯罪嫌疑人 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status ...

  2. D 最熟悉的陌生人 (纪念当年就读的梅州市江南高级中学)

    最熟悉的陌生人 作者:张慧桥 “蝶恋花” 我匆匆地跟听众道了声再见,手忙脚乱地关掉了机器,拿出手机按下了一个快捷键…… “嘟…嘟…” 电话响两下后,我听到了那个我在睡梦中都可以认出来的声音. “你现在 ...

  3. 手机GPS为什么能在室内定位?

      为什么手机在室内也能定位?大部分人知道手机会通过GPS进行定位,其实手机定位系统并不是和我们的RTK完全一样的,因为那样就无法解释为何在室内也能定位了,这里我来科普一下智能手机的那些定位方法.   ...

  4. js断点调试心得

    虽然网上已经有多的数不清的调试教程了,但仍然没有发现哪篇文章写的通俗易懂,索性自己尝试写写自己的一些使用习惯或者说是心得,希望对那些还不是很懂得使用断点调试的孩子有一些帮助(大神请无视~). 1.断点 ...

  5. infer.net 入门2 用一个侦探故事来讲解,通俗易懂

    The results look OK, but how do you know that you aren’t missing something. Would a more sophisticat ...

  6. 一款名為com.apple.pcapd的服務

    一款名為com.apple.pcapd的服務,通過libpcap網路數據包捕獲函數包捕獲流入和流出iOS設備的HTTP數據.據紮德爾斯基稱,這一服務在所有iOS設備上都是默認啟動的,能被用來在用戶不知 ...

  7. paper 97:异质人脸识别进展的资讯

    高新波教授团队异质人脸图像识别研究取得新突破,有望大大降低刑侦过程人力耗费并提高办案效率         近日,西安电子科技大学高新波教授带领的研究团队,在异质人脸图像识别研究领域取得重要进展,其对香 ...

  8. 黑客长期摇号不中"黑"掉北京小客车摇号网

    新闻链接:http://www.2cto.com/News/201310/248936.html 新闻时间:2013-10-11 新闻正文: 为发泄长期摇号不中的不满,同时也为自己研发的软件打广告,硕 ...

  9. 转载:Cellebrite携两大移动数据服务强势来华

    [IT168专稿]随着移动互联网的发展,智能终端也越来越普及,围绕整个移动互联网的产业链产生了巨大的商机.有这么一家做移动数据传输服务的厂商,他们一直专注在移动领域,为运营商和零售商以及司法部门提供服 ...

随机推荐

  1. 剑指offer 面试题5:替换空格

    题目描述 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy. 则经过替换之后的字符串为We%20Are%20Happy. 编程思想 ...

  2. selenium爬虫 | 爬取疫情实时动态

    import csvimport selenium.webdriverfrom selenium.webdriver.chrome.options import Optionsclass spider ...

  3. Pandas数据分析练手题(十题)

    数据集下载地址:https://github.com/Rango-2017/Pandas_exercises --------------------------------------------- ...

  4. mysql:如何解决数据修改冲突(事务+行级锁的实际运用)

    摘要:最近做一个接诊需求遇到一个问题,假设一个订单咨询超过3次就不能再接诊,但如果两个医生同时对该订单进行咨询,查数据库的时候查到的接诊次数都是2次,那两个医生都能接诊,所谓接诊可以理解为更新了接诊次 ...

  5. MongoDB查询优化--explain,慢日志

    引入 与Mysql数据库一样,MongoDB也有自己的查询优化工具,explain和慢日志 explain shell命令格式 db.collection.explain().<method(. ...

  6. 命令模式与go-redis command设计

    目录 一.什么是命令(Command)模式 二.go-redis command相关代码 三.总结 一.什么是命令(Command)模式 命令模式是行为型设计模式的一种,其目的是将一个请求封装为一个对 ...

  7. 基于循环队列的BFS的原理及实现

    文章首发于微信公众号:几何思维 1.故事起源 有一只蚂蚁出去寻找食物,无意中进入了一个迷宫.蚂蚁只能向上.下.左.右4个方向走,迷宫中有墙和水的地方都无法通行.这时蚂蚁犯难了,怎样才能找出到食物的最短 ...

  8. 解决 minicom 不能接收键盘输入问题

    今天突然minicom 不能接受键盘输入了.早上的时候在其他设备上不能识别usb转串口的设备,重新启动电脑后,恢复正常了.下午又出现minicom 不接收键盘输入. 百度了一下解决了. 解决方法 由于 ...

  9. VMware vSphere (EXSI) 安装使用

    VMware vSphere 镜像下载 VMware vSphere Hypervisor (ESXi) 6.7 https://my.vmware.com/cn/web/vmware/downloa ...

  10. 类型检查和鸭子类型 Duck typing in computer programming is an application of the duck test 鸭子测试 鸭子类型 指示编译器将类的类型检查安排在运行时而不是编译时 type checking can be specified to occur at run time rather than compile time.

    Go所提供的面向对象功能十分简洁,但却兼具了类型检查和鸭子类型两者的有点,这是何等优秀的设计啊! Duck typing in computer programming is an applicati ...