Suspects

Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u

Submit Status

Description

As Sherlock Holmes was investigating a crime, he identified n suspects. He knows for sure that exactly one of them committed the crime. To find out which one did it, the detective lines up the suspects and numbered them from 1 to n. After that, he asked each one: "Which one committed the crime?". Suspect number i answered either "The crime was committed by suspect number ai", or "Suspect number ai didn't commit the crime". Also, the suspect could say so about himself (ai = i).

Sherlock Holmes understood for sure that exactly m answers were the truth and all other answers were a lie. Now help him understand this: which suspect lied and which one told the truth?

Input

The first line contains two integers n and m (1 ≤ n ≤ 105, 0 ≤ m ≤ n) — the total number of suspects and the number of suspects who told the truth. Next n lines contain the suspects' answers. The i-th line contains either "+ai" (without the quotes), if the suspect number isays that the crime was committed by suspect number ai, or "-ai" (without the quotes), if the suspect number i says that the suspect number ai didn't commit the crime (ai is an integer, 1 ≤ ai ≤ n).

It is guaranteed that at least one suspect exists, such that if he committed the crime, then exactly m people told the truth.

Output

Print n lines. Line number i should contain "Truth" if suspect number i has told the truth for sure. Print "Lie" if the suspect number i lied for sure and print "Not defined" if he could lie and could tell the truth, too, depending on who committed the crime.

Sample Input

Input
1 1
+1
Output
Truth
Input
3 2
-1
-2
-3
Output
Not defined
Not defined
Not defined
Input
4 1
+2
-3
+4
-1
Output
Lie
Not defined
Lie
Not defined

Hint

The first sample has the single person and he confesses to the crime, and Sherlock Holmes knows that one person is telling the truth. That means that this person is telling the truth.

In the second sample there are three suspects and each one denies his guilt. Sherlock Holmes knows that only two of them are telling the truth. Any one of them can be the criminal, so we don't know for any of them, whether this person is telling the truth or not.

In the third sample the second and the fourth suspect defend the first and the third one. But only one is telling the truth, thus, the first or the third one is the criminal. Both of them can be criminals, so the second and the fourth one can either be lying or telling the truth. The first and the third one are lying for sure as they are blaming the second and the fourth one.

题目大意:给你n表示嫌疑人说的话,+c[i]表示第i个人说c[i]是犯人,-c[i]表示第i个人说c[i]不是犯人。m表示这n个人中有m个人说真话。现在让你判断每个人说的是真话还是假话,或者不确定。

解题思路:如果我们假设第i个人是犯人,那么我们通过O(n)的复杂度可以得出说真话的人的个数mi,那么如果mi==m,那么把这个人放入犯人数组。最后如果犯人数组中只有一个犯人,那么我们可以准确判断每个人说话的真假性。如果犯人数组中人数很多,那么如果c[i] > 0,且c[i]在犯人数组中,那么不确定,如果c[i]不在犯人数组中,那么这个人必然说假话;如果c[i]<0,且|c[i]|这个人在犯人数组中,那么也是不确定,如果|c[i]|不在犯人数组中,那么这个人必然说真话。 现在问题是如果每次用O(n)得出mi,那么复杂度将是O(n^2)。我们可以首先统计出总的说别人不是犯人的个数nosupn,以及说i是犯人的人数issuspect[i]和说i不是犯人的人数nosuspect[i],那么mi = issuspect[i] + nosupn - nosuspect[i]。 这复杂度为O(1)。

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<string>
#include<iostream>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<set>
using namespace std;
typedef long long LL;
#define mid (L+R)/2
#define lson rt*2,L,mid
#define rson rt*2+1,mid+1,R
#pragma comment(linker, "/STACK:102400000,102400000")
const int maxn = 1e5 + 300;
const int INF = 0x3f3f3f3f;
typedef long long LL;
typedef unsigned long long ULL;
int a[maxn];
int issuspect[maxn], nosuspect[maxn];
int iscrimer[maxn], crimer[maxn];
int main(){
int n, m;
while(scanf("%d%d",&n,&m)!=EOF){
int nosupn = 0;
for(int i = 1; i <= n; i++){
scanf("%d",&a[i]);
if(a[i] > 0){
issuspect[a[i]]++;
}else{
nosuspect[-a[i]]++;
nosupn++;
}
}
int saytrue = 0;
int cn = 0;
for(int i = 1; i <= n; i++){
saytrue = issuspect[i] + nosupn - nosuspect[i];
if(saytrue == m){
crimer[cn] = i; cn++;
iscrimer[i] = 1;
}
}
if(cn == 1){
for(int i = 1; i <= n; i++){
if(a[i] > 0){
if(iscrimer[a[i]]){
puts("Truth");
}else{
puts("Lie");
}
}else{
if(iscrimer[-a[i]]){
puts("Lie");
}else{
puts("Truth");
}
}
}
}else{
for(int i = 1; i <= n; i++){
if(a[i] > 0){
if(iscrimer[a[i]]){
puts("Not defined");
}else{
puts("Lie");
}
}else{
if(iscrimer[-a[i]]){
puts("Not defined");
}else{
puts("Truth");
}
}
}
}
}
return 0;
}

  

Codeforces 156B Suspects——————【逻辑判断】的更多相关文章

  1. CodeForces 156B Suspects(枚举)

    B. Suspects time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...

  2. CodeForces - 156B Suspects 逻辑 线性 想法 题

    题意:有1~N,n(1e5)个嫌疑人,有m个人说真话,每个人的陈述都形如X是凶手,或X不是凶手.现在给出n,m及n个陈述(以+x/-X表示)要求输出每个人说的话是true ,false or notd ...

  3. Codeforces Round #110 (Div. 2)

    Codeforces Round #110 (Div. 2) C. Message 题意 给两个长度不超过2000的字符串\(s,u\),仅由小写字母构成. 找出\(s\)的一个子串\(t\),通过3 ...

  4. Codeforces Round #330 (Div. 2)D. Max and Bike 二分 物理

    D. Max and Bike Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/595/probl ...

  5. Codeforces Round #298 (Div. 2) A. Exam 构造

    A. Exam Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/534/problem/A Des ...

  6. Codeforces Round #298 (Div. 2) A、B、C题

    题目链接:Codeforces Round #298 (Div. 2) A. Exam An exam for n students will take place in a long and nar ...

  7. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  8. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  9. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

随机推荐

  1. Arduino SPI + SPI Flash芯片W25Q80BV

    W25Q80BV是台湾华邦电子(Winbond)生产的8M-bit串行flash芯片.主要特性有: 工作电压:2.5 ~ 3.6 V 功耗:读写(active)时4mA,低功耗(power-down) ...

  2. How to design a product table for many kinds of product where each product has many parameters

    https://stackoverflow.com/questions/695752/how-to-design-a-product-table-for-many-kinds-of-product-w ...

  3. docker+selenium Grid搭建自动化分布式测试环境

    自动化测试需要考虑到兼容性的时候,之前的做法是每个执行机上安装不同版本的浏览器,实际上这样做会很浪费硬件资源,现在有了docker容器化技术,让一切变得简单. 工具清单: 语言:python 2.7 ...

  4. 单机版solr7.3

    搭建Solr7.3单机版 原博客  https://blog.csdn.net/yiqing_summer/article/details/79934584 1.Solr下载:http://mirro ...

  5. 1.css介绍

    CSS介绍 我们为什么需要CSS? 使用css的目的就是让网页具有美观一致的页面,另外一个最重要的原因是内容与格式分离 在没有CSS之前,我们想要修改HTML元素的样式需要为每个HTML元素单独定义样 ...

  6. django admin的自定制

    from django.contrib import admin # Register your models here. from .models import * from django.util ...

  7. “全栈2019”Java第十五章:Unicode与转义字符

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. suid, sgid,粘滞位,chattr

    一. 基本含义和作用 1. SUID:当设置了SUID 位的文件被执行时,该文件将以所有者的身份运行,也就是说无论谁来执行这个文件,他都有文件所有者的特权. 2. SGID:与上面的内容类似.用于设置 ...

  9. C# - Common Tool

    Json 涉及命名空间 using System.IO; using System.Net; using System.Runtime.Serialization.Json; using Newton ...

  10. NOIP模拟题汇总(加厚版)

    \(NOIP\)模拟题汇总(加厚版) T1 string 描述 有一个仅由 '0' 和 '1' 组成的字符串 \(A\),可以对其执行下列两个操作: 删除 \(A\)中的第一个字符: 若 \(A\)中 ...