传送门

解题思路

  一道%你神题,\(string\)好强大啊。。首先枚举一个周几,再枚举一个罪犯是谁,然后判断的时候就是枚举所有人说的话。定义\(fAKe[i]\)表示第\(i\)个人说的是真话还是假话还是未知。然后如果遇到\(xx is guilty\)或\(I am guilty\)之类的话,就看枚举的罪犯是否为这个人。如果说的是\(Today is xxx\),就看当前枚举的星期是否为这一天。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<string>
#include<map> using namespace std;
const int MAXN = 25; int n,m,p,fAKe[MAXN],w[205],ans,now,err;
string name[MAXN],say[205];
string day[10]={"","Today is Sunday.","Today is Monday.","Today is Tuesday.","Today is Wednesday."
,"Today is Thursday.","Today is Friday.","Today is Saturday."};
map<string,int> mp; void solve(int x,int y){
if(!fAKe[x]) fAKe[x]=y;
else if(fAKe[x] && fAKe[x]!=y) err=1;
} int main(){
scanf("%d%d%d",&m,&n,&p);
for(int i=1;i<=m;i++) cin>>name[i],mp[name[i]]=i;
for(int i=1;i<=p;i++){
string nm;cin>>nm;
nm.erase(nm.end()-1);w[i]=mp[nm];
getline(cin,say[i]);say[i].erase(say[i].begin());
say[i].erase(say[i].end()-1);
}
for(int td=1;td<=7;td++)
for(int chp=1;chp<=m;chp++){ //枚举罪犯
err=0;int who,cnt,pp;
memset(fAKe,0,sizeof(fAKe));
for(int i=1;i<=p;i++){
who=w[i];
if(say[i]=="I am guilty.") solve(who,who==chp?1:-1);
if(say[i]=="I am not guilty.") solve(who,who==chp?-1:1);
for(int j=1;j<=7;j++)
if(say[i]==day[j]) {solve(who,j==td?1:-1);break;}
for(int j=1;j<=m;j++){
if(say[i]==name[j]+" is guilty.") solve(who,chp==j?1:-1);
if(say[i]==name[j]+" is not guilty.") solve(who,chp==j?-1:1);
}
}
cnt=pp=0;
for(int i=1;i<=m;i++) {
if(!fAKe[i]) pp++;
if(fAKe[i]==-1) cnt++;
}
if(err || cnt>n || cnt+pp<n) continue;
if(ans && ans!=chp) {
puts("Cannot Determine");
return 0;
}
ans=chp;
}
if(ans) cout<<name[ans];
else puts("Impossible");
return 0;
}

LUOGU P1039 侦探推理 (字符串+模拟)的更多相关文章

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

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

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

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

  3. P1039 侦探推理

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

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

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

  5. 洛谷 P1039 侦探推理

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

  6. P1039 侦探推理(洛谷)

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

  7. 洛谷 P1039侦探推理

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

  8. 洛谷P1039侦探推理题解

    #include<cstdio> #include<cstring> #include<string> #include<iostream> using ...

  9. 【洛谷P1039】侦探推理

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

随机推荐

  1. 2018-6-17-win10-UWP-全屏

    title author date CreateTime categories win10 UWP 全屏 lindexi 2018-06-17 17:51:19 +0800 2018-2-13 17: ...

  2. 面对对象(JS)

    面对对象的三大特征:封闭.继承.多态 七大基本原则:    1.单一职责    2.开闭原则    3.里氏替换    4.依赖倒置    5.接口隔离    6.迪米特法则    7.01组合/聚合 ...

  3. Linux下安装.NETCore3.0

    今天把.NETCore从2.2升到3.0记录一下 Download .NET Core 3.0  :https://dotnet.microsoft.com/download/dotnet-core/ ...

  4. 从psd图中将图层导出成单独文件

  5. leetcode-158周赛-5222-分割字符串

    题目描述: 自己的提交: class Solution: def balancedStringSplit(self, s: str) -> int: if not s:return 0 res ...

  6. Batch - attrib 命令

    原文地址:CMD中使用attrib命令设置文件只读.隐藏属性详解 本文介绍一个cmd下的一个attrib.exe的小程序,它可以用来设置文件的属性.我们知道文件的属性有只读.隐藏.系统.存档和无内容索 ...

  7. look at me

    I would bet my life, like I bet my heart我以生命与真心担保That you were the one, baby你就是我的命中注定I've never been ...

  8. GDI+在Delphi程序的应用 Photoshop色相饱和度明度功能

    本文用GDI+实现Photoshop色相/饱和度/明度功能,参照我的其它有关GDI+在 Delphi程序的应用的文章,代码也可供TBitmap使用. 有些人不喜欢,或者不太懂Delphi的BASM代码 ...

  9. sqlserver 调优(三)

    用户数据库质疑状态处理(可能由于机房断电,数据库服务器异常重启后,导致个别数据库状态质疑): --修复数据库(置疑) -- xxxDB 为需要修复的数据库的名称 ALTER DATABASE xxxD ...

  10. Java-Class-C:org.springframework.http.converter.StringHttpMessageConverter

    ylbtech-Java-Class-C:org.springframework.http.converter.StringHttpMessageConverter 1.返回顶部 1.1. impor ...