ZJNU 1205 - 侦探推理——高级
双层枚举嫌疑犯与当日是星期几,统计真话与假话是否满足题意
注意 fake<=N&&fake+neutral>=N 即假话数量不大于N,假话加上没用的废话数量不小于N
(注意OJ上的数据存在问题:冒号后跟一个空格,CHARLES的话最后的句号‘.’应为半角,非全角)
可用样例输入:
MIKE
CHARLES
KATE
MIKE: I am guilty.
MIKE: Today is Sunday.
CHARLES: MIKE is guilty.
KATE: I am guilty.
KATE: How are you??
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> Par;
typedef pair<int,Par> Pr;
int M,N,P,ans,f[];
char s1[],s2[],s3[];
string dayStr[]={
"Monday"
,"Tuesday"
,"Wednesday"
,"Thursday"
,"Friday"
,"Saturday"
,"Sunday"
};
vector<string> name;
map<string,int> mp;
Pr prd[];
inline int readDigit(){
int x=;char c=getchar();
while(!isdigit(c))c=getchar();
for(;isdigit(c);c=getchar())x=x*+c-'';
return x;
}
inline void readName(){
char c;int i=;
while((c=getchar())!='\n')s1[i++]=c;
s1[i]='\0';
}
inline void readSubj(){
char c;int i=;
while((c=getchar())!=' ')s2[i++]=c;
s2[i-]='\0';
}
inline void readWords(){
char c;int i=;
while((c=getchar())!='\n')s3[i++]=c;
s3[i]='\0';
}
int main(){
int i,j,day,gty,fake,neutral,subid;
string sd;
bool jd,prim;
M=readDigit();
N=readDigit();
P=readDigit();
for(i=;i<M;i++){
readName();
name.push_back(s1);
mp[s1]=i;
}
for(i=;i<P;i++){
readSubj();
readWords();
sd=s3;
subid=mp[s2];
if(sd=="I am guilty.")
prd[i]=Pr(,Par(subid,subid));
else if(sd=="I am not guilty.")
prd[i]=Pr(,Par(subid,subid));
else{
jd=false;
for(j=;!jd&&j<;j++)
if(sd=="Today is "+dayStr[j]+"."){
prd[i]=Pr(,Par(subid,j));
jd=true;
break;
}
for(j=;!jd&&j<M;j++){
if(sd==name[j]+" is guilty."){
prd[i]=Pr(,Par(subid,j));
jd=true;
break;
}
else if(sd==name[j]+" is not guilty."){
prd[i]=Pr(,Par(subid,j));
jd=true;
break;
}
}
if(!jd)
prd[i]=Pr(,Par(,));
}
}
for(jd=false,day=;day<;day++){
for(gty=;gty<M;gty++){
memset(f,,sizeof f);
prim=true;
for(i=;i<P;i++){
if(prd[i].first==){
if(prd[i].second.second==gty){
if(!f[prd[i].second.first])
f[prd[i].second.first]=;
else if(f[prd[i].second.first]==){
prim=false;
break;
}
}
else{
if(!f[prd[i].second.first])
f[prd[i].second.first]=;
else if(f[prd[i].second.first]==){
prim=false;
break;
}
}
}
else if(prd[i].first==){
if(prd[i].second.second!=gty){
if(!f[prd[i].second.first])
f[prd[i].second.first]=;
else if(f[prd[i].second.first]==){
prim=false;
break;
}
}
else{
if(!f[prd[i].second.first])
f[prd[i].second.first]=;
else if(f[prd[i].second.first]==){
prim=false;
break;
}
}
}
else if(prd[i].first==){
if(prd[i].second.second==day){
if(!f[prd[i].second.first])
f[prd[i].second.first]=;
else if(f[prd[i].second.first]==){
prim=false;
break;
}
}
else{
if(!f[prd[i].second.first])
f[prd[i].second.first]=;
else if(f[prd[i].second.first]==){
prim=false;
break;
}
}
}
}
if(!prim)
continue;
neutral=fake=;
for(i=;i<M;i++)
if(f[i]==)
neutral++;
else if(f[i]==)
fake++;
if(fake<=N&&fake+neutral>=N){
if(!jd){
jd=true;
ans=gty;
}
else if(jd&&ans!=gty){
puts("Cannot Determine");
return ;
}
}
}
}
if(jd)
puts(name[ans].data());
else
puts("Impossible"); return ;
}
ZJNU 1205 - 侦探推理——高级的更多相关文章
- NOIP2003 侦探推理
题二 侦探推理 [问题描述] 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯( ...
- 洛谷P1039 侦探推理(模拟)
侦探推理 题目描述 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯(在明明不知情的情 ...
- 【洛谷P1039】侦探推理
侦探推理 题目链接 这是一道恶心至极的模拟题 我们可以枚举罪犯是谁,今天是星期几,从而判断每个人说的话是真是假 若每个人说的话的真假一致,且说谎话的人数<=k且说真话的人数<=m-k,就是 ...
- Luogu P1039 侦探推理(模拟+枚举)
P1039 侦探推理 题意 题目描述 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯 ...
- P1039 侦探推理
题目描述 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯(在明明不知情的情况下),明 ...
- [NOIP2003] 提高组 洛谷P1039 侦探推理
题目描述 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯(在明明不知情的情况下),明 ...
- 【b302】侦探推理
Time Limit: 1 second Memory Limit: 50 MB [问题描述] 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏 ...
- Luogu1039 侦探推理
题目描述 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯(在明明不知情的情况下),明 ...
- P1039 侦探推理(洛谷)
昨天做了一个非常神奇的题,告诉我们做题之前一定要好好检测评测姬! 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏的内容是这样的,明明的同学们先 ...
随机推荐
- JAVA程序中常用概念介绍
一.关键字.引用.直接量.变量.长量概念 1.关键字 java内部定义的java语言专用的单词,这些单词具有特殊含义,开发人员在定义自己声明的名称时,应该避开这些专用的单词.这些专用的单词也就称之为j ...
- 八、React实战:可交互待办事务表(表单使用、数据的本地缓存local srtorage、生命同期函数(页面加载就会执行函数名固定为componentDidMount()))
一.项目功能概述 示例网址:http://www.todolist.cn/ 功能: 输入待做事项,回车,把任务添加到 [正在进行] [正在进行] 任务,勾选之后,变成已[经完成事项] [已完成事务], ...
- vue作用域插槽实践
引言 我在练手的时候发现后端返回的数据可以通过两种方式渲染 (自己遇到的 可能你都会 哈哈哈) 后端传过来的数据函数 from django.http import JsonResponse def ...
- html 基础 (9.19 第八天)
一.HTML:超文本标记语言,是一种标签语言,不是编程语言,显示数据有双标签<body></body> 和单标签<img src=# / >, 标签大小写都可以通过 ...
- 面试题(7)之 leetcode-003
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&quo ...
- Android群英传知识点回顾——第十章:Android性能优化
10.1 布局优化 10.1.1 Android UI渲染机制 10.1.2 避免Overdraw 10.1.3 优化布局层级 10.1.4 避免嵌套过多无用布局 10.1.5 Hierarchy V ...
- Python 时间 time
import time print time.strftime("%Y-%m-%d") import datetime print datetime.datetime.now() ...
- chown virtualbox
virtualbox安装 root@cbill-VirtualBox:/# chown --help用法:chown [选项]... [所有者][:[组]] 文件... 或:chown [选项]... ...
- CTF - bugku-分析
1.flag被盗 下载链接是.pcang文件 用wireshark打开 像这种流量分析题目,就要用Wireshark自带的搜索功能找尝试查找一些关键词(比如key.flag.shell.pass等) ...
- 吴裕雄--天生自然 PHP开发学习:超级全局变量
<!DOCTYPE html> <html> <body> <?php $x = 75; $y = 25; function addition() { $GL ...