双层枚举嫌疑犯与当日是星期几,统计真话与假话是否满足题意

注意 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 - 侦探推理——高级的更多相关文章

  1. NOIP2003 侦探推理

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

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

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

  3. 【洛谷P1039】侦探推理

    侦探推理 题目链接 这是一道恶心至极的模拟题 我们可以枚举罪犯是谁,今天是星期几,从而判断每个人说的话是真是假 若每个人说的话的真假一致,且说谎话的人数<=k且说真话的人数<=m-k,就是 ...

  4. Luogu P1039 侦探推理(模拟+枚举)

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

  5. P1039 侦探推理

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

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

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

  7. 【b302】侦探推理

    Time Limit: 1 second Memory Limit: 50 MB [问题描述] 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏 ...

  8. Luogu1039 侦探推理

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

  9. P1039 侦探推理(洛谷)

    昨天做了一个非常神奇的题,告诉我们做题之前一定要好好检测评测姬! 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏的内容是这样的,明明的同学们先 ...

随机推荐

  1. Git提交出现error: src refspec master does not match any的问题

    在本地与远程分别新建了一个仓库并且关联后,想要把本地的文件提交到github上面, 输入下方命令后没有成功,而是出现了报错:error: src refspec master does not mat ...

  2. springboot项目 线程消费队列注入报错误空指针

    背景: 在调用阿里云隐私保护有一个通话记录的回执消息是一个消费线程队列,这个还别人告诉我的,因为我根本没有看出来哪里是个线程了,然后我就把它当成普通的代码拿到返回值以后然后插入数据库 可是我这边该加的 ...

  3. springboot+thymeleaf项目中使用th:replace访问templates子目录下的模板,会报错找不到模板路径

    解决方法: 先将模板路径放置templates目录下,发现可以访问,说明th:replace是可以用的. 那可能是出现在路径问题上面. 于是我开始调错,改路径. 后来在网上查找资料.说了很多种方法. ...

  4. 心形java和C语言2019/10/17

    在网上无意中看到这个代码,学习了一下心形函数的知识:http://mathworld.wolfram.com/HeartCurve.html package dada; /** * 了解Heart C ...

  5. H5 - 本地数据存储 - localStorage.setItem

  6. 18 react react-redux 的编写 TodoList

    1. 安装 react-redux yarn add react-redux 2. react-redux 编写 TodoList 使所有子组件 都能使用 store #index.js import ...

  7. Vue.js(18)之 axios简单封装

    基于vue-cli2.x封装axios src目录 axios.js import axios from 'axios' import { Indicator, Toast } from 'mint- ...

  8. Maven - 构建生命周期、阶段、目标

    版权所有,未经授权,禁止转载 章节 Maven – 简介 Maven – 工作原理 Maven – Repository(存储库) Maven – pom.xml 文件 Maven – 依赖管理 Ma ...

  9. part12 非核心代码异步加载

    router文件中的 index component: ()=> import(‘path’) // 这样 访问一个页面 就只请求这个页面的js逻辑 //当app很小的的时候不需要做异步拆分 / ...

  10. Codeforces 1290B/1291D - Irreducible Anagrams

    题目大意: 两串字符串 s 和 t 是否 anagrams(下文简称ANA) 的定义是: 是否能将 s 内的字母打乱顺序后再拼接得到 t 我们考虑互相ANA的两串字符串 s 和 t 我们称 t 是 s ...