#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侦探推理题解的更多相关文章

  1. 洛谷P1039 侦探推理(模拟)

    侦探推理 题目描述 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯(在明明不知情的情 ...

  2. 洛谷 P1039侦探推理

    /* 枚举罪犯和星期几,那么所有人说的话是真是假一目了然. 首先一个人不能既说真话又说假话. 即: I am guilty. I am not guilty. 因为非真即假,所以直接判断impossi ...

  3. [NOIP2003] 提高组 洛谷P1039 侦探推理

    题目描述 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯(在明明不知情的情况下),明 ...

  4. 洛谷 P1039 侦探推理

    题目:https://www.luogu.org/problemnew/show/P1039 分析: 这道题是一道有技术含量的模拟,我们主要是不要让计算机向人一样思考,只需要让他穷举变化的星期几和当罪 ...

  5. 洛谷P2832 行路难 分析+题解代码【玄学最短路】

    洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...

  6. 【洛谷P3960】列队题解

    [洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...

  7. 洛谷P2312 解方程题解

    洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...

  8. 洛谷P1577 切绳子题解

    洛谷P1577 切绳子题解 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位(直接舍掉2为后的小数). 输入输出格 ...

  9. 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)

    洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...

随机推荐

  1. SpringBoot 常用配置 静态资源访问配置/内置tomcat虚拟文件映射路径

    Springboot 再模板引擎中引入Js等文件,出现服务器拒绝访问的错误,需要配置过滤器 静态资源访问配置 @Configuration @EnableWebMvc public class Sta ...

  2. Springboot 结合百度IORC实现自定义模板图片识别

    前言: 首先呢,最近再公司的项目当中遇到这样的一个问题,就是需要识别图片,提取图片当中的关键语句,而且识别的语句当然是人家手写体识别,翻来覆去一想,最终还是决定使用百度的OCR帮助我解决这一项需求 话 ...

  3. REDISTEMPLATE如何注入到VALUEOPERATIONS

    REDISTEMPLATE如何注入到VALUEOPERATIONS 今天看到Spring操作redis  是可以将redisTemplate注入到ValueOperations,避免了ValueOpe ...

  4. docker查看容器日志

    原文:docker查看容器日志 前言 $ sudo docker logs -f -t --tail 行数 容器名 1 2 1.命令查看 root@c68d4b5dd583c4f4ea30da2989 ...

  5. 转 Html转pdf的工具——wkhtmltopdf

    下载地址:http://wkhtmltopdf.org/downloads.html 安装好以后需要在系统环境变量变量名为”Path”的后添加:;D:\wkhtmltopdf\bin 也就是你安装的目 ...

  6. Python 3 MySQL数据库操作

    import pymysql class Mysql_db(): def __init__(self,ip,username,password,db_name,table_name): self.ip ...

  7. PHP7预编译mysqli查询操作

    //连接数据库 $mysqli = new mysqli("localhost", "root", "root", "mobile ...

  8. Nginx 操作响应头信息的实现

    前置条件:需要编译 ngx_http_headers_module 模块,才支持 header 头信息操作 add_header 意思为将自定义的头信息的添加到响应头,指令为 add_header n ...

  9. Python学习笔记【1】

    1.%r和%s的区别 (1)stackflow 上面的一个解答 (2) x = "There are %d types of people." %10 binary = " ...

  10. DevOps简介_转

    转自:DevOps简介     刘大飞 DevOps 是一个完整的面向IT运维的工作流,以 IT 自动化以及持续集成(CI).持续部署(CD)为基础,来优化程式开发.测试.系统运维等所有环节. Dev ...