题目描述

明明同学最近迷上了侦探漫画《柯南》并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏。游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯(在明明不知情的情况下),明明的任务就是找出这个罪犯。接着,明明逐个询问每一个同学,被询问者可能会说:

证词中出现的其他话,都不列入逻辑推理的内容。

明明所知道的是,他的同学中有NNN个人始终说假话,其余的人始终说真。

现在,明明需要你帮助他从他同学的话中推断出谁是真正的凶手,请记住,凶手只有一个!

输入输出格式

输入格式:

输入由若干行组成,第一行有三个整数,M(1≤M≤20)M(1≤M≤20)M(1≤M≤20)、N(1≤N≤M)N(1≤N≤M)N(1≤N≤M)和P(1≤P≤100)P(1≤P≤100)P(1≤P≤100);MMM是参加游戏的明明的同学数,NNN是其中始终说谎的人数,PPP是证言的总数。

接下来MMM行,每行是明明的一个同学的名字(英文字母组成,没有空格,全部大写)。

往后有PPP行,每行开始是某个同学的名宇,紧跟着一个冒号和一个空格,后面是一句证词,符合前表中所列格式。证词每行不会超过250250250个字符。

输入中不会出现连续的两个空格,而且每行开头和结尾也没有空格。

输出格式:

如果你的程序能确定谁是罪犯,则输出他的名字;如果程序判断出不止一个人可能是罪犯,则输出 "Cannot Determine";如果程序判断出没有人可能成为罪犯,则输出 "Impossible"。

输入输出样例

输入样例#1: 复制

3 1 5
MIKE
CHARLES
KATE
MIKE: I am guilty.
MIKE: Today is Sunday.
CHARLES: MIKE is guilty.
KATE: I am guilty.
KATE: How are you??

输出样例#1: 复制

MIKE


这题真恶心,真恶心。Linux下换行符是'\r',被坑了好久。getline加上这个就A了。主要还是暴力。枚举哪个人是罪犯,枚举今天是星期几,然后每一句话的真假都很好判断。然后判断是否一个人的话有真有假...如果有这样的话直接退出找别的。大力的判断写到一半确实有点晕...最后再强调一下,Linux下的换行符号是'\r'!!!!!!别问我为什么这么强调,你尝试一下本地AC提交全WA的感受就行了233.

 
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
using namespace std;
#define reg registerint n, m, q;string name[25];
string Theday[10] = {"Today is Monday.","Today is Tuesday.","Today is Wednesday.","Today is Thursday.","Today is Friday.","Today is Saturday.","Today is Sunday.",
};string Dia[105];
bool useless[105];
int typ[105];
int opt[25];//-1 means true, 1 means false
int ans, nofa;
int who[105];
bool flas;int main()
{scanf("%d%d%d", &n, &m ,&q);for (reg int i = 1 ; i <= n ; i ++) cin >> name[i];getchar();for (reg int i = 1 ; i <= q ; i ++) {string in;cin >> in;in.erase(in.end() - 1);for (reg int j = 1 ; j <= n ; j ++) if (in == name[j]) who[i] = j;getline(cin, Dia[i], '\r');Dia[i].erase(Dia[i].begin());}for (reg int i = 1 ; i <= q ; i ++){for (reg int j = 0 ; j < 7 ; j ++) if (Dia[i] == Theday[j]) {typ[i] = 1;goto End;}if (Dia[i] == "I am guilty." or Dia[i] == "I am not guilty.") {typ[i] = 2;goto End;}for (reg int k = 1 ; k <= n ; k ++)if (Dia[i] == name[k] + " is guilty." or Dia[i] == name[k] + " is not guilty.") {typ[i] = 3;goto End;}        useless[i] = 1;End:;}for (reg int p = 1 ; p <= n ; p ++) {for (reg int tod = 0 ; tod < 7 ; tod ++){int jia = 0, bz = 0;memset(opt, 0, sizeof opt);for (reg int i = 1 ; i <= q ; i ++){if (useless[i]) continue;if (typ[i] == 1) {for (reg int j = 0 ; j < 7 ; j ++)if (Dia[i] == Theday[j]) {if (j == tod) if (opt[who[i]] == 1) goto Break;else opt[who[i]] = -1;if (j != tod) if (opt[who[i]] == -1) goto Break;else opt[who[i]] = 1;}}if (typ[i] == 2) {if (Dia[i] == "I am guilty.") {if (who[i] == p) if (opt[who[i]] == 1) goto Break;else opt[who[i]] = -1;if (who[i] != p) if (opt[who[i]] == -1) goto Break;else opt[who[i]] = 1;}if (Dia[i] == "I am not guilty.") {if (who[i] != p) if (opt[who[i]] == 1) goto Break;else opt[who[i]] = -1;if (who[i] == p) if (opt[who[i]] == -1) goto Break;else opt[who[i]] = 1;}}if (typ[i] == 3) {for (reg int j = 1 ; j <= n ; j ++) {if (Dia[i] == name[j] + " is guilty.") {if (j == p) if (opt[who[i]] == 1) goto Break;else opt[who[i]] = -1;if (j != p) if (opt[who[i]] == -1) goto Break;else opt[who[i]] = 1;                            }if (Dia[i] == name[j] + " is not guilty.") {if (j != p) if (opt[who[i]] == 1) goto Break;else opt[who[i]] = -1;if (j == p) if (opt[who[i]] == -1) goto Break;else opt[who[i]] = 1;                        }}}}for (reg int i = 1 ; i <= n ; i ++) {if (opt[i] == 1) jia++;if (opt[i] == 0) bz++;}if (jia <= m and bz + jia >= m) {if (ans and ans != p) return puts("Cannot Determine"), 0;ans = p;}Break:;}}if (!ans) return puts("Impossible"), 0;cout << name[ans] << endl;return 0;
}

 

转载于:https://www.cnblogs.com/BriMon/p/9580667.html

[Noip2003] 侦探推理相关推荐

  1. noip2003 侦探推理 (字符串处理)

    P1106侦探推理 Accepted 标签:字符串模拟NOIP提高组2003 描述 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏的内容是这样 ...

  2. NOIP2003 侦探推理

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

  3. NOIP2003 侦探推理 详解

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

  4. [NOIP2003]侦探推理 详解+python实现

    目录 题意 数据范围 样例数据 分析 正确理解题目 证词的含义 推理的正确性 算法 复杂度 代码 题意 M个人一起玩侦探游戏,其中有一名是凶手(其他人不知情),现在你要通过这些人的证词查明谁是凶手.证 ...

  5. noip2003侦探推理详解

    耗费了我三个多小时才想明白,orz orz orz 这题就是个坑←_←,这数据就是个逗比→_→  题目要求各位自寻,我不想再看见这道题第二遍=A=(数据我就珍藏了=.=) 读入的处理完全是noip提高 ...

  6. vijos 1106 NOIP2003 提高组 侦探推理 题解

    [原题] P1106侦探推理 Accepted 标签: [显示标签] 描述 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏的内容是这样的,明明 ...

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

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

  8. AcWing 478. 侦探推理 枚举+模拟

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

  9. 每日一练:第十一天——侦探推理

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

最新文章

  1. Flume NG 学习笔记(八)Interceptors(拦截器)测试
  2. 同一账户同时只能在一处登陆(单点登陆)
  3. RabbitMQ 一二事(2) - 工作队列使用
  4. 如何把选择屏幕放到标准屏幕上
  5. mysql 数据库事务处理_MySQL数据库事务及其原理
  6. Eclipse的SVN使用
  7. php mysql 代理_让PHP像C罗一样操作MySQL之ProxySQL
  8. SQL Server 2005 安装后,没有Management Studio管理工具的解决办法
  9. 开始开发HoloLens应用吧 Start Developing HoloLens Apps Today
  10. 仓储“云服务”初创公司 Clutter获得 6500 万美元 C 轮融资
  11. python图书管理实训报告总结_图书管理系统设计实训报告
  12. 申宝公司-两利好提振股市
  13. python的自省与反射机制
  14. rsa_eay_private_encrypt
  15. html 背景图片100,css背景图片100%显示
  16. 小觅摄像头 VINS-MONO安装
  17. 【好用的办公软件】万彩办公大师教程丨PDF安全加密解密
  18. chrome浏览器的性能测试--本文引用自 百度百科http://baike.baidu.com/view/1835504.htm
  19. Springboot:商品库存并发更新,乐观锁失败重试机制
  20. 设备功耗计算专题《测试仪器使用篇,EFM32GG-STK3700使用教程》

热门文章

  1. 30多年前,日本是如何输掉芯片战争的?
  2. eclipes Java代码连接Mysql数据库
  3. 查看电脑是否支持蓝牙和wifi
  4. 收藏一个Ping的小工具类,可用于网络中检测目的设备是否在线
  5. php农历生日计算,php实现的农历算法实例
  6. 15分钟读懂进程线程、同步异步、阻塞非阻塞、并发并行
  7. 计算机程序员笔试题,历年计算机软考程序员笔试真题及答案
  8. DPDK Rx flexible descriptor在Intel E810网卡中的使用
  9. python爬携程_用python selenium抓取携程信息
  10. 前端js数组元素的筛选,修改,新增属性小技巧一---前端数据筛选filter()函数,更新数组map()函数;