传送门

解题思路

  一道%你神题,\(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;
}

最新文章

  1. 简单回顾NPOI导入导出excel文件
  2. 关于HandlerThread的分析
  3. (十三) [终篇] 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字
  4. java-HashMap方法讲解
  5. 25个实用的jquery技巧
  6. WinForm 实现验证码
  7. 【CSS sprites (CSS图片精灵) 详解】
  8. SRM 394(1-250pt)
  9. [Javascript] Introducing Reduce: Common Patterns
  10. pyqt5消息框QMessageBox
  11. Irrlicht学习之光照的研究
  12. js、css3实现图片的放大效果
  13. 《k8s-1.13版本源码分析》-调度器框架
  14. PAT (Basic Level) Practice (中文)1023 组个最小数
  15. python网络编程初级
  16. [SoapUI] 在SoapUI中通过Groovy脚本执行window命令杀掉进程
  17. EMNLP 2018 | 用强化学习做神经机器翻译:中山大学&amp;MSRA填补多项空白
  18. PAT乙级1012
  19. django的单元测试框架unittest、覆盖率
  20. Levenshtein计算相似度距离

热门文章

  1. 富文本编辑器 CKeditor 配置使用+上传图片
  2. 2018-2-13-win10-uwp-如何拖动一个TextBlock的文字到另一个TextBlock-
  3. selenium+plantomJS
  4. bean创建
  5. leetcood学习笔记-54-螺旋矩阵
  6. Batch - call, start, goto 区别
  7. 在命令行窗口中输入EOF
  8. thinkphp 静态缓存
  9. Android中的Parcel机制(下)
  10. NOIp2018集训test-9-8(pm) (联考一day2)