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专稿]随着移动互联网的发展,智能终端也越来越普及,围绕整个移动互联网的产业链产生了巨大的商机.有这么一家做移动数据传输服务的厂商,他们一直专注在移动领域,为运营商和零售商以及司法部门提供服 ...
随机推荐
- Spring Boot 应用使用spring session+redis启用分布式session后,如何在配置文件里设置应用的cookiename、session超时时间、redis存储的namespace
现状 项目在使用Spring Cloud搭建微服务框架,其中分布式session采用spring session+redis 模式 需求 希望可以在配置文件(application.yml)里设置应用 ...
- Azure Terraform(五)利用Azure DevOps 实现自动化部署基础资源
一,引言 上一篇我们结合学习 Azure Traffic Manger 的内容,做了一个负载均衡的基础设施架构.通过 Terraform 部署执行计划,将整个 Azure Traffic Manage ...
- mysql:如何解决数据修改冲突(事务+行级锁的实际运用)
摘要:最近做一个接诊需求遇到一个问题,假设一个订单咨询超过3次就不能再接诊,但如果两个医生同时对该订单进行咨询,查数据库的时候查到的接诊次数都是2次,那两个医生都能接诊,所谓接诊可以理解为更新了接诊次 ...
- 阿里云VOD(二)
一.准备工作 1.设置不转码 测试之前设置默认"不转码",以节省开发成本 2.找到子账户的AccessKey ID 3.给子账户添加授权 AliyunVODFullAccess 4 ...
- MySQL调优之查询优化
一.查询慢的原因 1.网络 (1)网络丢包,重传 这个比较容易理解.当SQL 从客户端发送到数据库,执行完毕,数据库将结果返回给客户端,这个将数据返回给客户端的过程本质是网络包传输.因为链路的不稳定性 ...
- Vue中:error 'XXXXX' is not defined no-undef解决办法
Vue中:error 'XXXXX' is not defined no-undef解决办法 报错内容: × Client Compiled with some errors in 7.42s √ S ...
- 大数据系列4:Yarn以及MapReduce 2
系列文章: 大数据系列:一文初识Hdfs 大数据系列2:Hdfs的读写操作 大数据谢列3:Hdfs的HA实现 通过前文,我们对Hdfs的已经有了一定的了解,本文将继续之前的内容,介绍Yarn与Yarn ...
- Nagle's algorithm 封包 网络游戏协议封包需注意点 封包挂
w41字节的数据包只有1字节的可用信息.以减少数据包发送量来提高TCP/IP网络性能. https://en.wikipedia.org/wiki/Nagle's_algorithm https:// ...
- is == id ,编码
一. id 查询内存地址. # name = 'alex' # print(id(name)) # name1 = 'alex' # name2 = 'alex' # print(name1 == n ...
- python学习:随机数的产生,随机数拼接字在脚本中的应用
学习random的时候,看到一份表格觉得不错,转载记录到自己的笔记中: random以及它们在numpy.random中对应的函数应该会很有帮助: 注意:NumPy专门用于构建和操作大型多维数组.如果 ...