Problem 2202 犯罪嫌疑人

Accept: 109    Submit: 268
Time Limit: 1000 mSec    Memory Limit : 65536 KB

 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

2
3 2
-1
-2
-3
4 1
+2
-3
+4
-1

 Sample Output

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

 Source

FOJ有奖月赛-2015年10月

思路:

1、如果一个情况是成立的,那么其要满足只有一个犯人的条件。

那么什么是只有一个犯人的条件呢?很显然是剩下“一种”正数的情况。

也就是说m个没有说谎的人保持原符号,剩下n-m个有说谎的人添加了一个负号之后,只剩下“一种”正数。

2、

首先我们预处理出两个变量Add和Del,分别表示原来n个人说话中,有Add个加号,Del个负号。

同时预处理出add【i】=x表示i编号的人被x人说为是犯人,del【i】=x表示i编号的人被x人说不是犯人。

然后我们进行假定,分成两种情况分析:

①a【i】>0.我们不妨假定这句话说的是对的,那么:

add【a【i】】必须不能有人说谎,且del【a【i】】一定要说谎。

另外Del-del【a【i】】个人必须不能有人说谎。

那么当m-add【a【i】】-(Del-del【a【i】】)小于0或者是大于0的时候,都说明这个人撒了谎(情况不成立)。当==0的时候就是不确定。

②a【i】<0.我们发现如果假定这句话说的如果是对的话,很难处理.那么我们不妨假定这句话是错的,引入反证的思维。

同理如果当m-add【a【i】】-(Del-del【a【i】】)小于0或者是大于0的时候,都说明这个人一定是正确的(因为假定他是不对的不成立,反证得知)。当==0的时候就是不确定。

3、那么过程维护一下即可。

Ac代码:

#include<stdio.h>
#include<string.h>
#include<map>
using namespace std;
int a[100050];
int add[100050];
int del[100050];
int ans[100050];
//0 Lie
//1 Not defined
//2 Truth
int main()
{int t;scanf("%d",&t);while(t--){int n,m;scanf("%d%d",&n,&m);int Add=0;int Del=0;memset(add,0,sizeof(add));memset(del,0,sizeof(del));memset(ans,-1,sizeof(ans));for(int i=1;i<=n;i++){scanf("%d",&a[i]);if(a[i]>0){add[a[i]]++;Add++;}else{del[-a[i]]++;Del++;}}for(int i=1;i<=n;i++){if(a[i]>0){if((m-add[a[i]]-(Del-del[a[i]]))<0){ans[i]=0;}if((m-add[a[i]]-(Del-del[a[i]]))==0){ans[i]=1;}if((m-add[a[i]]-(Del-del[a[i]]))>0){ans[i]=0;}}if(a[i]<0){a[i]=-a[i];if((m-add[a[i]]-(Del-del[a[i]]))<0){ans[i]=2;}if((m-add[a[i]]-(Del-del[a[i]]))==0){ans[i]=1;}if((m-add[a[i]]-(Del-del[a[i]]))>0){ans[i]=2;}}}for(int i=1;i<=n;i++){if(ans[i]==0)printf("Lie\n");if(ans[i]==1)printf("Not defined\n");if(ans[i]==2)printf("Truth\n");}}
}

Fzu 2202 犯罪嫌疑人【逻辑推理思维题】好题!相关推荐

  1. FZU - 2202 犯罪嫌疑人(逻辑思维+简单模拟)

    题目链接:点击查看 题目大意:给出n和m,代表有n个人,每个人说一句话,指认一个人是无辜还是罪犯,总共有m个人说了真话,问每个人说话的真实性 题目分析:一拿到这个题目我是懵逼的..因为n给到了1e5, ...

  2. 【计算思维题】少儿编程 蓝桥杯青少组计算思维题真题及解析第2套

    少儿编程 蓝桥杯青少组计算思维题真题及解析第2套 1.天平的左右两端分别放有一些砝码,如下图所示,右边的砝码不变,从左边最多拿走几个砝码,可以使天平左右两边平衡 A.1 B.2 C.3 D.4 答案: ...

  3. 【计算思维题】少儿编程 蓝桥杯青少组计算思维题真题及解析第1套

    少儿编程 蓝桥杯青少组计算思维题真题及解析第1套 1.多多观察一个立体图形,从不同的角度看到的形状如下图所示: 这个立体图形可能是  答案:D 考点分析:考查小朋友们的观察能力和推理能力,从前面视角看 ...

  4. php编程数学思维题,小学一年级数学思维训练100题打印版.doc

    小学一年级数学思维训练100题53297 PAGE PAGE 1 小学一年级思维训练100题 1.哥哥4个HYPERLINK "/click/click.php?r=/article_htm ...

  5. 2022北京高考数学压轴题21题的一种解答

    2022年北京高考数学压轴题21题的一种解答 如题,近日2022年北京高考数学最后一题已经浮出水面,在此以我微薄的才学,对2022北京高考数学压轴题(新定义题型)做一种解答.该题型十分灵活,我的解答未 ...

  6. 数学建模进入“新课标”,告别了“刷题”“押题”数学应该怎么学?

    前段时间,光明日报教育周刊发表了一篇题为<靠刷题.押题还能得高分吗>的文章,并用一整个版面来探讨"双减"后的数学教育问题.各大媒体纷纷转发,一时间刷爆朋友圈. < ...

  7. 【科技素养题】少儿编程 蓝桥杯青少组科技素养题真题及解析第17套

    [科技素养题]少儿编程 蓝桥杯青少组科技素养题真题及解析第17套 1.在阅读文章和接受信息时注意区分事实和观点十分重要.事实(或称为命题)不同于观点的一个主要特征是 A.可以被证实或证伪 B.是准确无 ...

  8. 面试算法题刷题资源库

    0x00 收割 offer 版 不管是找工作笔试面试白板试进大厂,还是研究生参加初试复试机试,数据结构和算法都是绕不过去的坎,刷题就成了很多人的需求,快来看看下面这些网站,变身刷题机器,收割 offe ...

  9. CF 绿蓝题做题记录

    CF 绿蓝题做题记录 题单 最近有在经常随机一些 CF 绿蓝难度的题目,用于提升思维.这里专门开个坑,记录一下思路障碍经验什么的. 自然这些内容也在每天本来的做题记录中就有记录,只不过这里只是把它集合 ...

最新文章

  1. 使用nexus来搭建Nuget私服
  2. html5考试总结300字,期中考心得300字5
  3. Linux0.11进程切换和TSS结构
  4. java写微信小程序答辩问题_微信小程序毕业设计选题和毕业论文怎么写,答辩流程是怎样的?...
  5. cnblogs第一篇
  6. TensorFlow在windows 下的安装
  7. 2021 - 9 -下旬 数据结构- 线性表 -双端循环队列 - java实现
  8. instanceof java list_Java:Instanceof和泛型
  9. freemark循环map_freemarker中循环map根据key值得value 报错
  10. ThreadLocal原理解析以及是否需要调用remove方法
  11. 阿里技术专家:进击的 Java ,云原生时代的蜕变
  12. mvc创建连接mysql_五、 创建连接串连接本地数据库(ASP.NET MVC5 系列)
  13. Java并发编程之ReentrantReadWriteLock详解
  14. PHP银行卡信息基类大全
  15. VS2017离线下载安装包教程
  16. ADF4351应用电路
  17. 【饭谈】自动化有三宝:工资高,福利好,代码和人总有一个能跑
  18. Gerry。沙漠苦旅。
  19. rpm安装mysql8(通过脚本快速配置)
  20. 万能装机大师专业版教程

热门文章

  1. 福州市计算机等级考试培训点,计算机等级考试培训
  2. L298N驱动电机+pwm
  3. 人力资源管理的六大模块
  4. 克鲁斯卡尔算法求最小生成树
  5. 【元宇宙系列】Roblox创世纪(Mateverse)
  6. 基于人脸识别和图像分割技术制作证件照
  7. iPhone手机获取uuid
  8. 怎样转换音频格式?安利这几款软件给你
  9. 2015网络安全大会-上
  10. typed.js_对CircleCI的“为什么我们不再使用Core.typed”的答案