洛谷P1039侦探推理题解
#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
using namespace std;
string s[1005];
int fake[1005];
string name[1005];
string day[10]={"23333333","Today is Monday.","Today is Tuesday.","Today is Wednesday.","Today is Thursday.","Today is Friday.","Today is Saturday."};
int say[1005];
int err;
int pd(int who,int x)
{
if(fake[who]&&fake[who]!=x)err=1;
else fake[who]=x;
}
int main()
{
int n,m,p;
scanf("%d%d%d",&m,&n,&p);
for(int i=1;i<=m;i++)
{
cin>>name[i];
}
for(int i=1;i<=p;i++)
{
string nm;
cin>>nm;
nm.erase(nm.end()-1);
for(int j=1;j<=m;j++)
{
if(name[j]==nm)say[i]=j;//say[i]=j表示第i句话是j说的
}
getline(cin,s[i]);//把这一行剩下的读进去
s[i].erase(s[i].begin());//把开头的空格去掉?
s[i].erase(s[i].end()-1); //这一句话加上评测A,不加样例本地过。。。
}
int tag=0;
for(int xq=1;xq<=7;xq++)
{
for(int per=1;per<=m;per++)
{
err=0;
memset(fake,0,sizeof(fake));
for(int i=1;i<=p;i++)
{
if(s[i]=="I am guilty.")
{
if(per==say[i])//如果是这个人说自己
{
pd(say[i],1);//是成立的
}
else
{
pd(say[i],-1); //否则不成立
}
}
if(s[i]=="I am not guilty.")
{
if(per!=say[i])//同理
{
pd(say[i],1);
}
else
{
pd(say[i],-1);
}
}
for(int j=1;j<=7;j++)//再枚举一下星期几
{
if(s[i]==day[j])//第i句话说是星期j
{
if(j==xq)//判断是不是这一天
{
pd(say[i],1);
}
else
{
pd(say[i],-1);
}
}
}
for(int j=1;j<=m;j++)
{
if(s[i]==name[j]+" is guilty.")//判断这句话是不是j说的
{
if(per==j)//再判断是不是当前这个人
{
pd(say[i],1);
}
else
{
pd(say[i],-1);
}
}
if(s[i]==name[j]+" is not guilty.")
{
if(per!=j)//同理
{
pd(say[i],1);
}
else
{
pd(say[i],-1);
}
}
}
}
int cnt1=0,cnt2=0;
for(int i=1;i<=m;i++)
{
if(fake[i]==-1)//当前为说假话
{
cnt1++;
}
if(fake[i]==0)//这个人无法判断
{
cnt2++;
}
}
if(err==0&&cnt1<=n&&cnt1+cnt2>=n)//没有矛盾并且说假话的人比n少并且说假话的人加上不确定的人数>=n(确保不确定的人中有说假话的人加上可以达到n
{
if(tag&&tag!=per)//tag有过(保证不是第一个)并且tag和当前的人不是同一个
{
printf("Cannot Determine\n");//说明有多个,输出
return 0;
}
else
{
tag=per;//tag更新一下
}
}
}
}
if(tag==0)//tag始终没更新,找不到凶手了
{
printf("Impossible\n");
return 0;
}
cout<<name[tag];
return 0;
}
洛谷P1039侦探推理题解的更多相关文章
- 洛谷P1039 侦探推理(模拟)
侦探推理 题目描述 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯(在明明不知情的情 ...
- 洛谷 P1039侦探推理
/* 枚举罪犯和星期几,那么所有人说的话是真是假一目了然. 首先一个人不能既说真话又说假话. 即: I am guilty. I am not guilty. 因为非真即假,所以直接判断impossi ...
- [NOIP2003] 提高组 洛谷P1039 侦探推理
题目描述 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯(在明明不知情的情况下),明 ...
- 洛谷 P1039 侦探推理
题目:https://www.luogu.org/problemnew/show/P1039 分析: 这道题是一道有技术含量的模拟,我们主要是不要让计算机向人一样思考,只需要让他穷举变化的星期几和当罪 ...
- 洛谷P2832 行路难 分析+题解代码【玄学最短路】
洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...
- 【洛谷P3960】列队题解
[洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...
- 洛谷P2312 解方程题解
洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...
- 洛谷P1577 切绳子题解
洛谷P1577 切绳子题解 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位(直接舍掉2为后的小数). 输入输出格 ...
- 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)
洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...
随机推荐
- python MySQL 插入Elasticsearch
一.需求分析 注意: 本环境使用 elasticsearch 7.0版本开发,切勿低于此版本 mysql 表结构 有一张表,记录的数据特别的多,需要将7天前的记录,插入到Elasticsearch中, ...
- ultraedit 实际应用技巧
Tip 1: Alt+C 列模式可以说最初选择使用这个文本编辑软件,原因很简单,就是因为“她”具有列编辑模式.如果您还不知道什么是列编辑模式的话,我想您应该好好研究一下啦.这是一个超级“赞”的功能.在 ...
- yum安装k8s集群
k8s的安装有多种方式,如yum安装,kubeadm安装,二进制安装等.本文是入门系列,只是为了快速了解k8s的原理和工作过程,对k8s有一个快速的了解,这里直接采用yum安装 的1.5.2为案例进行 ...
- Java CPU占用过高问题排查,windows和Linux
LINUX系统: linux系统比较简单: 1.使用命令 ps -ef | grep 找出异常java进程的pid. 找出pid为 20189 2. top -H -p 20189,所有该进程的线程 ...
- 【CF1095F】 Make It Connected(最小生成树)
题目链接 如果没有特殊边的话显然答案就是权值最小的点向其他所有点连边. 所以把特殊边和权值最小的点向其他点连的边丢一起跑最小生成树就行了. #include <cstdio> #inclu ...
- OO第4次博客作业
OO第4次博客作业 一.第4单元设计 第四单元主要围绕UML图的结构进行JAVA代码编写,对JAVA的层次结构进行更多的认识.个人认为编程操作在实质上与上一章的PathContainer有许多的相同之 ...
- BUAAOO-Final-Summary
目录 总结本单元两次作业的架构设计 总结自己在四个单元中架构设计及OO方法理解的演进 总结自己在四个单元中测试理解与实践的演进 总结自己的课程收获 立足于自己的体会给课程提三个具体改进建议 两次架构设 ...
- docker-compose的一些服务一直是restarting
1.查看日志 docker logs jenkins(镜像名字) 1.1 可能权限问题 1.2可能内存问题
- JS去除字符串左右两端的空格(转载)
来源:https://www.cnblogs.com/fanyf/p/3785387.html var str=' 测试 '; 一.函数 <script type="t ...
- SSH框架笔记01_SSH整合的两种方式
目录 1. 框架回顾 2. 创建项目,引入jar包 2.1 Struts2的jar包 2.2 Hibernate的jar包 2.3 Spring的jar包 3. 引入配置文件 3.1 Struts2配 ...