fzu2202 犯罪嫌疑人
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
Sample Output
Source
FOJ有奖月赛-2015年10月
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<algorithm>
using namespace std;
#define ll long long
#define inf 0x7fffffff
#define maxn 100050
int cot1[maxn],cot2[maxn];
int ans[maxn],a[maxn];
int num1[maxn],num2[maxn];
struct node{
int to,next;
}e1[maxn];
int first1[maxn];
struct node1{
int to,next;
}e2[maxn];
int first2[maxn];
int main()
{
int n,m,i,j,T,t,sum2,v,tot1,tot2,k;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
memset(first1,-1,sizeof(first1));
memset(first2,-1,sizeof(first2));
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));
memset(cot1,0,sizeof(cot1));
tot1=tot2=0;
sum2=0;
for(i=1;i<=n;i++){
ans[i]=2;
int x;
scanf("%d",&x);
t=abs(x);
if(x<0){
sum2++;
tot2++;
e2[tot2].next=first2[t];e2[tot2].to=i;
first2[t]=tot2;
num2[t]++;
}
else{
tot1++;
e1[tot1].next=first1[t];e1[tot1].to=i;
first1[t]=tot1;
num1[t]++;
}
}
if(m==0){
for(i=1;i<=n;i++){
printf("Lie\n");
}
continue;
}
if(m==n){
for(i=1;i<=n;i++){
printf("Truth\n");
}
continue;
}
int tot=0;
for(i=1;i<=n;i++){
int sum=num1[i]+sum2-num2[i];
if(sum==m){
tot++;
cot1[i]++;
}
}
if(tot==1){
for(i=1;i<=n;i++){
if(cot1[i]){
for(k=first1[i];k!=-1;k=e1[k].next){
ans[e1[k].to ]=1;
}
for(k=first2[i];k!=-1;k=e2[k].next){
ans[e2[k].to ]=0;
}
}
else{
for(k=first1[i];k!=-1;k=e1[k].next){
ans[e1[k].to ]=0;
}
for(k=first2[i];k!=-1;k=e2[k].next){
ans[e2[k].to ]=1;
}
}
}
}
else{
for(i=1;i<=n;i++){
if(cot1[i]){
continue;
}
else{
for(k=first1[i];k!=-1;k=e1[k].next){
ans[e1[k].to ]=0;
}
for(k=first2[i];k!=-1;k=e2[k].next){
ans[e2[k].to ]=1;
}
}
}
}
for(i=1;i<=n;i++){
if(ans[i]==0)printf("Lie\n");
else if(ans[i]==1)printf("Truth\n");
else printf("Not defined\n");
}
}
return 0;
}
fzu2202 犯罪嫌疑人的更多相关文章
- FZU 2202——犯罪嫌疑人——————【思维题】
犯罪嫌疑人 Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status ...
- D 最熟悉的陌生人 (纪念当年就读的梅州市江南高级中学)
最熟悉的陌生人 作者:张慧桥 “蝶恋花” 我匆匆地跟听众道了声再见,手忙脚乱地关掉了机器,拿出手机按下了一个快捷键…… “嘟…嘟…” 电话响两下后,我听到了那个我在睡梦中都可以认出来的声音. “你现在 ...
- 手机GPS为什么能在室内定位?
为什么手机在室内也能定位?大部分人知道手机会通过GPS进行定位,其实手机定位系统并不是和我们的RTK完全一样的,因为那样就无法解释为何在室内也能定位了,这里我来科普一下智能手机的那些定位方法. ...
- js断点调试心得
虽然网上已经有多的数不清的调试教程了,但仍然没有发现哪篇文章写的通俗易懂,索性自己尝试写写自己的一些使用习惯或者说是心得,希望对那些还不是很懂得使用断点调试的孩子有一些帮助(大神请无视~). 1.断点 ...
- infer.net 入门2 用一个侦探故事来讲解,通俗易懂
The results look OK, but how do you know that you aren’t missing something. Would a more sophisticat ...
- 一款名為com.apple.pcapd的服務
一款名為com.apple.pcapd的服務,通過libpcap網路數據包捕獲函數包捕獲流入和流出iOS設備的HTTP數據.據紮德爾斯基稱,這一服務在所有iOS設備上都是默認啟動的,能被用來在用戶不知 ...
- paper 97:异质人脸识别进展的资讯
高新波教授团队异质人脸图像识别研究取得新突破,有望大大降低刑侦过程人力耗费并提高办案效率 近日,西安电子科技大学高新波教授带领的研究团队,在异质人脸图像识别研究领域取得重要进展,其对香 ...
- 黑客长期摇号不中"黑"掉北京小客车摇号网
新闻链接:http://www.2cto.com/News/201310/248936.html 新闻时间:2013-10-11 新闻正文: 为发泄长期摇号不中的不满,同时也为自己研发的软件打广告,硕 ...
- 转载:Cellebrite携两大移动数据服务强势来华
[IT168专稿]随着移动互联网的发展,智能终端也越来越普及,围绕整个移动互联网的产业链产生了巨大的商机.有这么一家做移动数据传输服务的厂商,他们一直专注在移动领域,为运营商和零售商以及司法部门提供服 ...
随机推荐
- HBASE Shell基本命令
定义 HBASE是一种分布式.可扩展.支持海量数据存储的NoSQL数据库. HBASE数据模型 逻辑上,HBASE的数据模型同关系型数据库类似,数据存储到一张表中,有行有列,但是从HBASE的底层物理 ...
- C#使用ODP.NET连接oracle数据库
ODP.NET:Oracle Data Provider for .NET 分为三种: ODP.NET, Managed Driver 不需要安装oracle客户端 ODP.NET,Unmanaged ...
- 翻译 - ASP.NET Core 基本知识 - 中间件(Middleware)
翻译自 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware/?view=aspnetcore-5.0 中间件是集成 ...
- [Usaco2012 Dec]Running Away From the Barn
题目描述 给出以1号点为根的一棵有根树,问每个点的子树中与它距离小于等于l的点有多少个. 输入格式 Line 1: 2 integers, N and L (1 <= N <= 200,0 ...
- Sgu149 Computer Network
Sgu149 Computer Network 题目描述 给你一棵N(N<=10000)个节点的树,求每个点到其他点的最大距离. 不难想到一个节点到其他点的最大距离为:max(以它为根的子树的最 ...
- 面试官:你说说ReentrantLock和Synchronized区别
大家好!又和大家见面了.为了避免面试尴尬,今天同比较通俗语言和大家聊下ReentrantLock和Synchronized区别! 使用方式 Synchronized可以修饰实例方法,静态方法,代码块. ...
- Linux性能监测(系统监测统计命令详解)
通过这个命令,可以最简便的看出系统当前基本状态信息,这里面最有用是负载指标,如果你还想查看当前系统的CPU/内存以及相关的进程状态,可以使用TOP命令. TOP 通过TOP命令可以详细看出当前系统的C ...
- 安装、登入centos7
系统CentOS7.4 http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Everything-1708.iso 虚 ...
- libevent之基于socket的bufferevent
基于socket的bufferevent由一个socket的传输层和read/write buffer组成.区别于常规的event,当socket可读或者可写时会回调用户的callback,buffe ...
- jsaper子报表Subreport(父子报表互相传值)
有很多人都说Jasperreports不适合中国式复杂报表,实际上运用好父子报表可以解决大部分问题了.例如下面的表.每个学生的学科数目不固定,且每个学生后有相当于小计的平均分.有点复杂度的报表,可以使 ...