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. 关于软件架构中的b/s

    **B/S架构 b/s只需要一个浏览器,用户就可以通过不同的网址访问不同的服务器程序. 优点:开发,安装,部署,维护简单 缺点:对硬件要求过高,用户的体验会受到影响 首先是资源分类:**可以分为静态资 ...

  2. 天梯赛练习 L3-010 是否完全二叉搜索树 (30分) 数组建树模拟

    题目分析: 本题的要求是将n个数依次插入一个空的二叉搜索树(左大右小,且没有重复数字),最后需要输出其层次遍历以及判断是否是完全二叉搜索树,通过观察我们发现, 如果这个树是用数组建立的,那么最后输出的 ...

  3. (二)数据源处理6-excel数据转换实战(下)

    将结果的所有数据整理如下: {'api_case_01': [{'测试用例编号': 'api_case_01', '测试用例名称': '获取access_token接口测试', '用例执行': '是' ...

  4. 【Java】计算机软件、博客的重要性、编程语言介绍和发展史

    之前学得不踏实,重新复习一遍,打扎实基础中. 记录 Java核心技术-宋红康_2019版 & Java零基础学习-秦疆 文章目录 软件开发介绍 软件开发 什么是计算机? 硬件及冯诺依曼结构 计 ...

  5. 【EXPDP/IMPDP】数据泵导入导出遇到目录没有权限问题

    当执行数据泵导出的时候,报了如下错误: ORA-39002: invalid operation ORA-39070: Unable to open the log file. ORA-39087: ...

  6. poj-Decoding Morse Sequences(动态规划)

    Description Before the digital age, the most common "binary" code for radio communication ...

  7. 手机QQ空间自动点赞登录

    学以致用~使用 Appium 模拟人类操控手机行为 V2.0在手机上运行,目前实现以下功能: 1.小黑屋模式,一分钟内给好友发100条消息然后进了好友的小黑屋 2.定时发消息提醒对象多喝热水~ 3.对 ...

  8. Numpy的一些学习记录

    Numpy的一些记录 产生numpy.array的方式 import numpy as np arr1 = np.array([1, 2, 3]) print(arr1) arr2 = np.zero ...

  9. ModuleNotFoundError 模块寻找路径

    t = os.path.dirname(os.path.dirname((os.path.dirname(os.path.abspath(__file__)))))os.path.sys.path.a ...

  10. Python PyCharm安装第三方库

    第一步:在PyCharm菜单中选择File--->Settings 第二步:在设置页出现的搜索框搜索:Project Interpreter 或者直接定位到此处 第三步:输入库名,搜索安装第三方 ...