vijos1106侦探推理&&Noip提高组2003
来源:互联网 发布:js购物车结算代码 编辑:程序博客网 时间:2024/05/01 07:10
真是那啥的模拟……还是字符串模拟!!!,对于我这个从Pascal转到c++从不用stl的我来说太难了。。。。(那我为啥要转?我也不知道。。。。)
这题个人认为没什么需要转弯的地方,各个方面都考虑到就可以啦。。本人当天比较闲。。用了很多时间写,于是想到哪里就写到哪里,所以代码非常丑,见谅见谅。
附代码:
#include<cstdio>#include<cstring>#include<algorithm>#include<string>#include<iostream>using namespace std;string sayer,ss,youzui,name[100],namee,weiyu,today,feiwu;char temc1,temc2;bool mark[1000],panduanfeiren,lier[1000],youmathersser;int n,m,p,hess,num,len,tem,fanren,tot,feiren;string day[8]={"ssyou","Monday.","Tuesday.","Wednesday.","Thursday.","Friday.","Saturday.","Sunday."};struct BIG{ int guilty[1000]; string weather[1000]; int weathercc; int guiltycc;};BIG a[150];bool check(){ for(int i=1;i<=7;i++) if(day[i]==youzui) return true; return false;}bool checkname(){ for(int i=1;i<=n;i++) if(name[i]==namee) return true; return false;}int main(){// freopen("haha.out","w",stdout); scanf("%d%d%d",&n,&m,&p); for(int i=1;i<=n;i++) cin>>name[i]; for(int i=1;i<=n;i++) name[i]=name[i]+":"; for(int i=1;i<=n;i++) for(int j=1;j<=500;j++) a[i].weather[j]=day[0]; for(int i=1;i<=p;i++){ cin>>sayer; for(int j=1;j<=n;j++) if(name[j]==sayer) num=j; if(num!=0){ scanf("%c",&temc2); cin>>namee; if(namee=="I"){ scanf("%c",&temc1); cin>>weiyu; if(weiyu=="am"){ scanf("%c",&temc2); cin>>youzui; if(youzui=="not"){ scanf("%c",&temc1); cin>>youzui; if(youzui=="guilty."){ a[num].guiltycc++; a[num].guilty[a[num].guiltycc]=-num; } } else if(youzui=="guilty."){ a[num].guiltycc++; a[num].guilty[a[num].guiltycc]=num; } } if(weiyu=="is"){ hess=0; namee=namee+":"; for(int j=1;j<=n;j++) if(namee==name[j]) hess=j; if(hess!=0){ scanf("%c",&temc1); cin>>youzui; if(youzui=="not"){ scanf("%c",&temc1); cin>>youzui; if(youzui=="guilty."){ a[num].guiltycc++; a[num].guilty[a[num].guiltycc]=-hess; } } else if(youzui=="guilty."){ a[num].guiltycc++; a[num].guilty[a[num].guiltycc]=hess; } } } } if(namee=="Today"){ scanf("%c",&temc1); cin>>ss; if(ss=="is"){ scanf("%c",&temc1); cin>>youzui; if(check()){ a[num].weathercc++; a[num].weather[a[num].weathercc]=youzui; } } } namee=namee+":"; if(checkname()){ for(int j=1;j<=n;j++) if(namee==name[j]) hess=j; scanf("%c",&temc1); cin>>weiyu; if(weiyu=="is"){ scanf("%c",&temc1); cin>>youzui; if(youzui=="not"){ scanf("%c",&temc1); cin>>youzui; if(youzui=="guilty."){ a[num].guiltycc++; a[num].guilty[a[num].guiltycc]=-hess; } } else if(youzui=="guilty."){ a[num].guiltycc++; a[num].guilty[a[num].guiltycc]=hess; } } } } getline(cin,feiwu); }/* for(int i=1;i<=n;i++){ for(int j=1;j<=a[i].guiltycc;j++) printf("%d ",a[i].guilty[j]); printf("\n"); for(int j=1;j<=a[i].weathercc;j++) cout<<a[i].weather[j]; printf("\n"); }*/ for(int i=1;i<=n;i++) for(int j=1;j<=7;j++){ fanren=i; today=day[j]; tem=0; feiren=0; youmathersser=false; memset(lier,false,sizeof(lier)); for(int k=1;k<=n;k++){ for(int p=1;p<=a[k].weathercc;p++){ if(a[k].weather[p]!=day[0]&&a[k].weather[p]!=today) lier[k]=true; } for(int p=1;p<=a[k].guiltycc;p++){ if((a[k].guilty[p]>0&&a[k].guilty[p]!=fanren)||(a[k].guilty[p]<0&&a[k].guilty[p]==-fanren)) lier[k]=true; } panduanfeiren=true; for(int p=1;p<=a[k].guiltycc;p++) if(a[k].guilty[p]!=0) panduanfeiren=false; for(int p=1;p<=a[k].weathercc;p++) if(a[k].weather[p]!="ssyou") panduanfeiren=false; if(panduanfeiren) feiren++; if(lier[k]==true){ for(int p=1;p<=a[k].guiltycc;p++) if(a[k].guilty[p]==fanren||(a[k].guilty[p]!=-fanren&&a[k].guilty[p]<0)) youmathersser=true; for(int p=1;p<=a[k].weathercc;p++) if(a[k].weather[p]==today) youmathersser=true; tem++; } } if(tem<=m&&tem+feiren>=m&&!youmathersser) mark[i]=true; } for(int i=1;i<=n;i++) if(mark[i]) tot++; if(tot==0) printf("Impossible"); if(tot>1) printf("Cannot Determine"); if(tot==1){ for(int i=1;i<=n;i++) if(mark[i]){ len=name[i].size(); for(int k=0;k<=name[i].size()-2;k++) printf("%c",name[i][k]); } } return 0;}
1 0
- vijos1106侦探推理&&Noip提高组2003
- [NOIP提高组2003]侦探推理
- 【NOIP 2003提高】侦探推理 模拟
- Noip 2003T2 侦探推理
- vijos 1106 & NOIP2003 提高组 侦探推理 题解
- 侦探推理
- 侦探推理
- 侦探推理小故事
- Codevs 侦探推理
- 侦探推理 (NOIP2003)
- NOIP2003 侦探推理
- 洛谷 P1039 侦探推理
- noip2003侦探推理详解
- 【b302】侦探推理
- NOIP2003 侦探推理 详解
- NOIP 2003 侦探原理 大模拟+枚举
- NOIP 提高组 2003
- noip2003 侦探推理 终极模拟
- Deep Learning Papers Reading Roadmap——1.1 survey Deep Learning
- Codeforces Round #377 (Div. 2) Cormen --- The Best Friend Of a Man
- 傅里叶变化的探索
- C#命名方式转换代码
- 数据立方体的基本计算
- vijos1106侦探推理&&Noip提高组2003
- 2013_changsha_onsite
- Android RecyclerView使用完全解析-体验艺术般的控件
- Android 抽奖 GridView 只显示周围一圈的item 纯算法实现
- 关于滚动条的几个参数
- C/C++字符串,字符数组,字符指针及其相互静态拷贝与追加的安全问题解决方案(2)
- 数据结构之栈(C语言实现)
- hdu 2141 Can you find it?(二分)
- Apple公司Darwin流式服务器源代码分析(一)