洛谷 P1039 侦探推理

2023-10-09 05:08
文章标签 推理 洛谷 侦探 p1039

本文主要是介绍洛谷 P1039 侦探推理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

明明同学最近迷上了侦探漫画《柯南》并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏。游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯(在明明不知情的情况下),明明的任务就是找出这个罪犯。接着,明明逐个询问每一个同学,被询问者可能会说:
这里写图片描述

证词中出现的其他话,都不列入逻辑推理的内容。

明明所知道的是,他的同学中有N个人始终说假话,其余的人始终说真。

现在,明明需要你帮助他从他同学的话中推断出谁是真正的凶手,请记住,凶手只有一个!

输入输出格式

输入格式:
输入由若干行组成,第一行有二个整数,M(1≤M≤20)、N(1≤N≤M)和P(1≤P≤100);M是参加游戏的明明的同学数,N是其中始终说谎的人数,P是证言的总数。接下来M行,

每行是明明的一个同学的名字(英文字母组成,没有主格,全部大写)。

往后有P行,每行开始是某个同学的名宇,紧跟着一个冒号和一个空格,后面是一句证词,符合前表中所列格式。证词每行不会超过250个字符。

输入中不会出现连续的两个空格,而且每行开头和结尾也没有空格。

输出格式:
如果你的程序能确定谁是罪犯,则输出他的名字;如果程序判断出不止一个人可能是罪犯,则输出 Cannot Determine;如果程序判断出没有人可能成为罪犯,则输出 Impossible。

输入输出样例

输入样例#1:
3 1 5
MIKE
CHARLES
KATE
MIKE: I am guilty.
MIKE: Today is Sunday.
CHARLES: MIKE is guilty.
KATE: I am guilty.
KATE: How are you??
输出样例#1:
MIKE


对于每个人,记录他认为的凶手,非凶手,和今天的星期。
枚举凶手,星期。
模拟即可。
注意linux中不能用gets,getline,所以判断行末可以判断标点。


#include<iostream>
#include<cstdio>
#include<string>
#include<map>
using namespace std;
int n,m,p,sit[205];
string name[25];
map<string,int>ren,weekday;
string sent[]={"","I am guilty.","I am not guilty.","is guilty.","is not guilty.","Today is"};
struct person
{int shi[25],fou[25],ri[25];
}a[25];
int main()
{scanf("%d%d%d",&m,&n,&p);for(int i=1;i<=m;i++){cin>>name[i];ren[name[i]]=i;}weekday["Monday."]=1;weekday["Tuesday."]=2;weekday["Wednesday."]=3;weekday["Thursday."]=4;weekday["Friday."]=5;weekday["Saturday."]=6;weekday["Sunday."]=7;while(p--){string s,u;cin>>s;int t=ren[s.substr(0,s.find(":"))];s="";while(s[s.length()-1]!='.'&&s[s.length()-1]!='?'&&s[s.length()-1]!='!'&&s[s.length()-1]!=','){cin>>u;s.push_back(' ');s+=u;}for(int j=1;j<=5;j++){int k=s.find(sent[j]);if(k!=-1){if(j==1)a[t].shi[++a[t].shi[0]]=t;else if(j==2)a[t].fou[++a[t].fou[0]]=t;else if(j==3)a[t].shi[++a[t].shi[0]]=ren[s.substr(1,k-2)];else if(j==4)a[t].fou[++a[t].fou[0]]=ren[s.substr(1,k-2)];elsea[t].ri[++a[t].ri[0]]=weekday[s.substr(k+9,s.length()-9)];break;}}}for(int i=1;i<=m;i++)//凶手 {bool pd=0;for(int j=1;j<=7;j++)//星期 {bool flag=0;int jia=0,cnt=0;for(int k=1;k<=m;k++)//每一个人 {int flg=-1;if(!flag)for(int g=1;g<=a[k].shi[0];g++)if(a[k].shi[g]==i){if(flg==-1)flg=1;if(flg==0)flag=1;}else{if(flg==-1)flg=0;if(flg==1)flag=1;}if(!flag)for(int g=1;g<=a[k].fou[0];g++)if(a[k].fou[g]==i){if(flg==-1)flg=0;if(flg==1)flag=1;}else{if(flg==-1)flg=1;if(flg==0)flag=1;}if(!flag)for(int g=1;g<=a[k].ri[0];g++)if(a[k].ri[g]==j){if(flg==-1)flg=1;if(flg==0)flag=1;}else{if(flg==-1)flg=0;if(flg==1)flag=1;}if(!flag){if(flg==-1)cnt++;else if(flg==0)jia++;}}if(!flag){if(jia<=n&&jia+cnt>=n)pd=1;}}if(pd)sit[++sit[0]]=i;}if(sit[0]==0)printf("Impossible\n");else if(sit[0]==1)cout<<name[sit[1]]<<endl;elseprintf("Cannot Determine\n");return 0;
}

这篇关于洛谷 P1039 侦探推理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/170551

相关文章

PyInstaller问题解决 onnxruntime-gpu 使用GPU和CUDA加速模型推理

前言 在模型推理时,需要使用GPU加速,相关的CUDA和CUDNN安装好后,通过onnxruntime-gpu实现。 直接运行python程序是正常使用GPU的,如果使用PyInstaller将.py文件打包为.exe,发现只能使用CPU推理了。 本文分析这个问题和提供解决方案,供大家参考。 问题分析——找不到ONNX Runtime GPU 动态库 首先直接运行python程序

高精度计算(代码加解析,洛谷p1601,p1303)除法待更新

目录 高精度加法 高精度减法 高精度乘法 高精度加法 我们知道在c++语言中任何数据类型都有一定的表示范围。当两个被加数很大时,正常加法不能得到精确解。在小学,我们做加法都采用竖式方法。那么我们也只需要按照加法进位的方式就能得到最终解。 8 5 6+ 2 5 5-------1 1 1 1 加法进位: c[i] = a[i] + b[i];if(c[i] >=

洛谷 凸多边形划分

T282062 凸多边形的划分 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 先整一个半成品,高精度过两天复习一下补上 #include <iostream>#include <algorithm>#include <set>#include <cstring>#include <string>#include <vector>#include <map>

能量项链,洛谷

解释:  环形dp问题还是考虑将环拉直,可以参考我上一篇文章:环形石子合并 [2 3 5 10 2] 3 5 10 将环拉直,[]内是一个有效的区间,可以模拟吸收珠子的过程,         如[2 3 5] <=>(2,3)(3,5)    2是头,3是中间,5是尾 len >= 3:因为最后[2 10 2]是最小的可以合并的有效区间 len <= n + 1因为[2 3

【有啥问啥】大模型应用中的哈希链推理任务

大模型应用中的哈希链推理任务 随着人工智能技术的快速发展,尤其是大模型(如GPT、BERT、Vision Transformer等)的广泛应用,确保数据处理和模型推理的透明性与安全性变得愈发重要。哈希链推理任务作为一种技术手段,能够在大模型应用中保障数据的完整性和推理过程的可信性。本文将深入探讨哈希链推理任务的数学基础、技术细节、应用场景,并展望未来发展趋势。 一、哈希链与哈希链推理任务

yolov8-obb旋转目标检测onnxruntime和tensorrt推理

onnxruntime推理 导出onnx模型: from ultralytics import YOLOmodel = YOLO("yolov8n-obb.pt") model.export(format="onnx") onnx模型结构如下: python推理代码: import cv2import mathimport numpy as npimport onnxr

第一个100%开源的MoE大模型,7B的参数,1B的推理成本

尽管大语言模型 (LM) 在各种任务上取得了重大进展,但在训练和推理方面,性能和成本之间仍然需要权衡。 对于许多学者和开发人员来说,高性能的 LM 是无法访问的,因为它们的构建和部署成本过高。改善成本 - 性能的一种方法是使用稀疏激活混合专家 (MoE)。MoE 在每一层都有几个专家,每次只激活其中的一个子集(参见图 2)。这使得 MoE 比具有相似参数量的密集模型更有效,因为密集模型为每个

3天把Llama训成Mamba,性能不降,推理更快!

近日,Mamba方面又搞出了有意思的研究:来自康奈尔、普林斯顿等机构的研究人员成功将Llama提炼成了Mamba模型,并且设计了新的推测解码算法,加速了模型的推理。\ 先来看一张其乐融融的图片(一眼AI): 右边的小羊驼代表Llama,而左边的蛇(Mamba)也是我们的老熟人了。 至于到底能不能其乐融融,咱就不管了,之所以有此场景,是因为Mamba方面又搞出了有意思的研究: ——如何把

深度学习|模型推理:端到端任务处理

引言 深度学习的崛起推动了人工智能领域的诸多技术突破,尤其是在处理复杂数据与任务的能力方面。模型推理作为深度学习的核心环节,决定了模型在真实应用场景中的表现。而端到端任务处理(End-to-End Task Processing)作为深度学习的一种重要范式,通过从输入到输出的直接映射,显著提升了任务处理的效率和精度。在传统机器学习中,特征提取、数据清理、模型选择等步骤需要独立处理,过程繁琐且

洛谷P5490扫描线

0是最小的数字,将一个线段看成一个区间,对于一个矩形,从下扫到上,入边为1,而出边为-1,意思是将这个区间上的所有点加1(区间修改).把线段表示为Line[i],其中记录了l,r,h,tag,左右端点,高度,入边还是出边(1或-1) 那么每次区间修改后不为0的区间它的值可能是1,2,3或者是其它数字,这不好统计,可以将它转化一下,0是不是表示没有被覆盖过的地方,我们只要统计0的个数然后用总长减去