洛谷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 ...
随机推荐
- kafka和zookeeper安装部署(版本弄不好就是坑)
yum install -y unzip zip 配置host vi /etc/host172.19.68.10 zk1 1. zookeeper zookeeper下载地址 http://mirro ...
- vue3生命周期
介绍 vue3的生命周期函数,可以按需导入到组件中,且只能在 setup() 函数中使用 示例 import { onMounted, onUpdated } from '@vue/compositi ...
- charles4.0 request和response的显示设置
点击右上角的设置按钮 点击preferences 切换到viewers,取消勾选Combine request and response,点击保存即可
- 可分离滤波器设计高斯滤波 CUDA程序优化, 实验记录
环境:RTX2060 ,1920X1080p ,循环10次, kernal_size=8 一 .测试前128个线程拷贝到dst数据的性能 ,只测试行卷积, block=(128+2r)X1 1. 使 ...
- javascript创建一个基于对象的栈结构
上篇博客介绍了基于数组创建一个栈,这是用对象创建一个栈 s1.声明一个Stack类 class Stack { constructor() { this.count = 0; this.items = ...
- 73.移动端Web界面滚动性能优化 Passive event listeners
题,滚动时候不仅滚动了希望滚动的部分,整体的页面也跟随者上下滚动,整个页面非常卡顿. 这两个页面都用了touch事件 控制台打印如下警告: [Intervention] Unable to preve ...
- springmvc集成cxf的方法
最近需要在项目中增加webservice接口,供三方调用,下面就把集成的方法展示如下,供大家参考: 第一步:服务端的发布; 1:配置web.xml文件,添加cxf的servlet <servle ...
- group by 和 order by 的区别 + 理解过程
order by 和 group by 的区别order by 和 group by 的区别:1,order by 从英文里理解就是行的排序方式,默认的为升序. order by 后面必须列出排序的字 ...
- Linux常用时间函数
time()函数: NAME time - get time in seconds SYNOPSIS #include <time.h> time_t time(time_t *tloc) ...
- k8s安装之node-autoapprove-certificate-server.yaml
kubelet证书分为server和client两种, k8s 1.9默认启用了client证书的自动轮换,但server证书自动轮换需要用户开启.方法是: 2.1 增加 kubelet 参数(现已默 ...