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. Flutter 布局类组件:层叠布局(Stack和Positioned)

    前言 层叠布局,即子组件可以根据距父容器四个角的位置来确定自身的位置.绝对定位运行子组件堆叠起来,即按照代码中声明的顺序. Flutter中使用Stack和Positioned这两个组件来配合实现绝对 ...

  2. LeetCode671. 二叉树中第二小的节点

    题目 纯暴力 1 class Solution { 2 public: 3 vector<int>ans; 4 int findSecondMinimumValue(TreeNode* r ...

  3. Unsafe Fileupload - Pikachu

    概述: 文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像.上传附件等等.当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型.后缀名.大小等等,然后将其按照设计 ...

  4. Android 中使用 config.gradle

    各位同学大家好,当然了如果不是同学,那么大家也同好.哈哈. 大家知道config.gradle 是什么吗?我也不知道.开个完笑,其实config.gradle 就是我们为了统一gradle 中的各种配 ...

  5. 【分享】每个 Web 开发者在 2021 年必须拥有 15 个 VSCode 扩展

    为什么VSCode如此受欢迎 Visual Studio Code在开发人员中迅速流行起来,它是最流行的开发环境,可定制性是其流行的原因之一. 因此,如果你正在使用VSCode,这里有一个扩展列表,你 ...

  6. 阿里云镜像仓库镜像迁移至私有Harbor

    下载镜像同步工具 wget https://goodrain-delivery.oss-cn-hangzhou.aliyuncs.com/boe/image-syncer && chm ...

  7. Python攻城——查看,生成幫助文檔

    1. python在控制台中查看文檔 1 python -m pydoc 模塊名 2. pydoc生成HTML文檔 1 python -m pydoc -w 模塊名 1 python -m pydoc ...

  8. Bitter.Core系列五:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore ORM 之 示例 分页聚联查询

    Bitter.Core 在聚联/分页聚联查询的时候,采用原生的MSSQL, MYSQL 语句查询,做过复杂高级项目的人知道,原生的聚合查询代码执行效率更高,更快,更容易书写,开发量最少. 借助原生的M ...

  9. SQL解析工具

    面对复杂的SQL可用这个SQL解析工具,分析出用到了哪些表哪些字段: http://107.170.101.241:8080/getTableColumn/

  10. java中List元素移除元素的那些坑

    https://blog.csdn.net/javageektech/article/details/96668890  List  的迭代器类 采用倒序移除 jdk1.8的写法 public sta ...