犯罪嫌疑人--逻辑推理
2017-10-06 22:28
281 查看
福尔摩斯是个大侦探,他总是在解决疑难案件。这一次的案件也不例外,案件是这样的:有编号为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
Sample Output
分析:逻辑推理题,具体过程如下:
先统计出来可能的罪犯数目,接下来分两种情况:
①如果数目等于一,那么如果某个人被说是罪犯,并且他是可能的罪犯,那么就是true,否则即false;
如果某个人被说不是罪犯,并且他是可能的罪犯,那么就是false,否则即true
②如果数目大于一,那么如果某个人被说是罪犯,并且他是可能的罪犯,那么就是不确定,否则即false; 如果某个人被说不是罪犯,并且他是可能的罪犯,那么就是不确定,否则即true
上代码咯:
/* 逻辑推理判断题:
* 思路分析如上
* 具体见代码
* */
import java.util.*;
public class Main{
static Scanner in = new Scanner(System.in);
static int MAX = 100010;
static int[] isSuspe = new int[MAX];//统计编号为i的人被指控的次数
static int[] notSuspe = new int[MAX];//统计编号为i的人被不指控的次数
static int[] posible = new int[MAX];//统计可能的罪犯的编号
static int[] a = new int[MAX];//存放输入
public static void main(String args[]){
int k = in.nextInt();
while(k-->0) {
//注意每次清空
Arrays.fill(isSuspe, 0);
Arrays.fill(notSuspe, 0);
Arrays.fill(posible, 0);
Arrays.fill(a, 0);
int n = in.nextInt();
int m = in.nextInt();
int notPri=0;
for (int i = 1; i <= n; i++) {
a[i] = in.nextInt();
if(a[i]>0){
isSuspe[a[i]]++;
}
else{
notSuspe[-a[i]]++;
notPri++;
}
}
int cnt = 0;
for (int i = 1; i <= n; i++) {
//这句话的意思是:如果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 LieNot defined
分析:逻辑推理题,具体过程如下:
先统计出来可能的罪犯数目,接下来分两种情况:
①如果数目等于一,那么如果某个人被说是罪犯,并且他是可能的罪犯,那么就是true,否则即false;
如果某个人被说不是罪犯,并且他是可能的罪犯,那么就是false,否则即true
②如果数目大于一,那么如果某个人被说是罪犯,并且他是可能的罪犯,那么就是不确定,否则即false; 如果某个人被说不是罪犯,并且他是可能的罪犯,那么就是不确定,否则即true
上代码咯:
/* 逻辑推理判断题:
* 思路分析如上
* 具体见代码
* */
import java.util.*;
public class Main{
static Scanner in = new Scanner(System.in);
static int MAX = 100010;
static int[] isSuspe = new int[MAX];//统计编号为i的人被指控的次数
static int[] notSuspe = new int[MAX];//统计编号为i的人被不指控的次数
static int[] posible = new int[MAX];//统计可能的罪犯的编号
static int[] a = new int[MAX];//存放输入
public static void main(String args[]){
int k = in.nextInt();
while(k-->0) {
//注意每次清空
Arrays.fill(isSuspe, 0);
Arrays.fill(notSuspe, 0);
Arrays.fill(posible, 0);
Arrays.fill(a, 0);
int n = in.nextInt();
int m = in.nextInt();
int notPri=0;
for (int i = 1; i <= n; i++) {
a[i] = in.nextInt();
if(a[i]>0){
isSuspe[a[i]]++;
}
else{
notSuspe[-a[i]]++;
notPri++;
}
}
int cnt = 0;
for (int i = 1; i <= n; i++) {
//这句话的意思是:如果i号可能是罪犯,那么此时真话的数目为:他被指控的次数+(总的不被指控的次数-减去
//他不被指控的次数) //因为他被指控的次数肯定是真话,同时他不被指控的次数肯定是假话,同时不指控他而指控别人的也肯定是真话 if(isSuspe[i]+notPri-notSuspe[i]==m){ posible[i]=1; cnt++; } } if(cnt>1){ for (int i = 1; i <= n; i++) { if(a[i]>0){ if(posible[a[i]]==1) System.out.println("Not defined"); else System.out.println("Lie"); } else{ if(posible[-a[i]]==1) System.out.println("Not defined"); else System.out.println("Truth"); } } } else{ for (int i = 1; i <= n; i++) { if(a[i]>0){ if(posible[a[i]]==1) System.out.println("Truth"); else System.out.println("Lie"); } else{ if(posible[-a[i]]==1) System.out.println("Lie"); else System.out.println("Truth"); } } } } } }
相关文章推荐
- Fzu 2202 犯罪嫌疑人【逻辑推理思维题】好题!
- 【C语言】怎么用C语言来解逻辑推理题 | 运用离散数学+形式逻辑学的思想
- 一道逻辑推理题的程序实现(纯属娱乐)
- 智力题及答案(逻辑推理)
- python 示例分享---逻辑推理编程解决八皇后
- 正确的思考能力之一自省和逻辑推理-
- 用程序解逻辑推理题
- 逻辑推理训练
- 趣味逻辑推理
- 【离散数学】第五章 一阶逻辑等值演算与推理
- 算法15_笔试_数字逻辑推理题1
- 湖南省首届逻辑推理大赛
- 微软面试题--10个问题的逻辑推理题
- 模糊逻辑与逻辑推理
- 一道经典的逻辑推理题
- “阿基里斯和乌龟”与逻辑推理的各向异性
- 计算机可以做推理逻辑吗?
- 【IT公司笔试面试】75道逻辑推理题及答案
- Hinton Neural Networks课程笔记4a:使用神经网络做逻辑推理
- 逻辑推理与判断(谜语博士的难题(1))