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. oracle通过job执行procedure

    1. 先创建一个FUNCTION CREATE OR REPLACE FUNCTION GET_TIMEOUT_PROGRAM(i_customerNo IN TK_CUST_PROG_D.CUSTO ...

  2. RabbitMQ与.net core(四) 消息的优先级 与 死信队列

    1.消息的优先级 假如现在有个需求,我们需要让一些优先级最高的通知推送到客户端,我们可以使用redis的sortedset,也可以使用我们今天要说的rabbit的消息优先级属性 Producer代码 ...

  3. leetcode 2 两数相加 JAVA

    题目: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示 ...

  4. django数据模型中关于on_delete的使用

    django数据模型中关于on_delete的使用 class BookModel(models.Model): """ 书籍表 """ b ...

  5. [Maven实战-许晓斌]-[第二章]-2.5 Eclipse上面安装Maven插件 m2eclipse

    Eclipse上面安装Maven插件 m2eclipse --需要特别指出的是,越来越多的最新的Eclipse版本自带Maven m2e http://m2eclipse.sonatype.org/s ...

  6. iOS 键盘的监听 调整view的位置

    iOS在处理键盘的出现和消失时需要监听UIKeyboardWillChangeFrameNotifications/UIKeyboardDidHideNotifications - (void)vie ...

  7. 条目二十三《考虑用排序的vector替代关联容器》

    条目二十三<考虑用排序的vector替代关联容器> 在看到这个条目的标题的时候,说实话,我一下子是比较懵逼的.这个结论怎么和数据结构的时间复杂度不一致了? 一般来说,像map,set等关联 ...

  8. [转] iOS 在UILabel显示不同的字体和颜色

    在项目开发中,我们经常会遇到在这样一种情形:在一个UILabel 使用不同的颜色或不同的字体来体现字符串,在iOS 6 以后我们可以很轻松的实现这一点,官方的API 为我们提供了UILabel类的at ...

  9. image_size must contain 3 elements[4]

    今天在制作自己训练集合并且训练的时候,碰见了如下的错: image_size must contain 3 elements[4] 这是因为训练的数据集中不是所有的图片位深都是三通道的. 写一个脚本查 ...

  10. spring切面拦截实现

    1.建立业务类(英雄战斗实现类) package com.g2.api; public interface Weapon { int attack(); String getName(); } pac ...