FZU2202-犯罪嫌疑人
2017-03-10 23:34
141 查看
Problem 2202 犯罪嫌疑人
Accept: 107 Submit: 263
福尔摩斯是个大侦探,他总是在解决疑难案件。这一次的案件也不例外,案件是这样的:有编号为1到N的N位嫌疑犯,他们其中有一个犯了罪,然后每个嫌疑犯都被询问,“哪一个人犯了罪?”犯罪嫌疑人的答案只能“编号ai的嫌疑犯犯了罪”或者“编号ai的嫌疑犯没有犯罪”。当然嫌疑犯也可以说他自己(ai = i).
福尔摩斯凭着他敏锐的侦探直觉,确定地对华生说,只有M个人说了真话,其余人都是说谎。然后就没有然后了,但华生却想知道哪些人说谎哪些人又是讲真话。这个时候同样聪明的你,被誉为红旗下的名侦探是否愿意秀一下自己的侦探天赋,帮助可怜的华生嘛?
第一行一个整数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 个人说了真话。
输出为N行,第i行是第i个嫌疑犯的输出。如果第i个嫌疑犯说了是真话,输出“Truth”;如果说谎,则输出“Lie”,如果不确定,则输出“Not defined”。
23 2-1-2-34 1+2-3+4-1
Not definedNot definedNot definedLieNot definedLieNot defined
FOJ有奖月赛-2015年10月
解题思路:假设i是犯人,则说真话的人数=说i是犯人的人数+(说某人不是犯人的人数-说i不是犯人的人数)
若i说x是犯人,x可能是犯人时,i说的可能是真话也可能是假话;x不可能是犯人时,i说的必为假话
若i说x不是犯人,x可能是犯人时,i说的可能是真话也可能是假话;x不可能是犯人时,i说的必为真话
Accept: 107 Submit: 263
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
23 2-1-2-34 1+2-3+4-1
Sample Output
Not definedNot definedNot definedLieNot definedLieNot defined
Source
FOJ有奖月赛-2015年10月解题思路:假设i是犯人,则说真话的人数=说i是犯人的人数+(说某人不是犯人的人数-说i不是犯人的人数)
若i说x是犯人,x可能是犯人时,i说的可能是真话也可能是假话;x不可能是犯人时,i说的必为假话
若i说x不是犯人,x可能是犯人时,i说的可能是真话也可能是假话;x不可能是犯人时,i说的必为真话
#include <iostream> #include <cstdio> #include <string> #include <cstring> #include <algorithm> #include <cmath> #include <queue> #include <vector> #include <set> #include <stack> #include <map> #include <climits> #include <functional> using namespace std; #define LL long long const int INF=0x3f3f3f3f; int x[100010],a[100010],b[100010],f[100010]; int main() { int t,n,m; scanf("%d",&t); while(t--) { memset(a,0,sizeof a); memset(b,0,sizeof b); memset(f,0,sizeof f); int num=0,cnt=0; scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&x[i]); if(x[i]>0) a[x[i]]++; else { b[-x[i]]++; num++; } } for(int i=1;i<=n;i++) { if(m==a[i]+num-b[i]) { f[i]=1; cnt++; } } if(cnt>1) { for(int i=1;i<=n;i++) { if(x[i]>0&&!f[x[i]]) printf("Lie\n"); else if(x[i]<0&&!f[-x[i]]) printf("Truth\n"); else printf("Not defined\n"); } } else { for(int i=1;i<=n;i++) { if(x[i]>0&&f[x[i]]) printf("Truth\n"); else if(x[i]<0&&!f[-x[i]]) printf("Truth\n"); else printf("Lie\n"); } } } return 0; }
相关文章推荐
- FZU 2202 犯罪嫌疑人(模拟、推理)
- FZU-2202-犯罪嫌疑人 -10.1训练赛
- fzu2202犯罪嫌疑人 逻辑判断
- Fzu 2202 犯罪嫌疑人【逻辑推理思维题】好题!
- G-FZU2022- 犯罪嫌疑人
- FZU 2202——犯罪嫌疑人——————【思维题】
- foj2202 Problem 2202 犯罪嫌疑人
- foj2202犯罪嫌疑人
- 【FZU 2200、2202~2204】FOJ有奖月赛 2015.10 个人的部分题解(C、E、F、G)
- FZU校赛
- FZU 1060 Fibonacci数列
- FZU 1752 A^B mod C
- FZU 1033 URLs
- FZU 1012 Relatives
- FZU 1563 Prime Numbers
- fzu 1926 填空 【kmp字符串匹配】
- hdu_2202_凸包求最大三角形
- 盒子里的气球 枚举法 刘汝佳 算法艺术与信息学竞赛 例一 ACM/ICPC World Finals 2002 fzu 1515
- fzu 2051 Monster (贪心)
- fzu 1752 A^B mod C fzu 1650 AB mod C