码迷,mamicode.com
首页 > 其他好文 > 详细

ZJNU 1205 - 侦探推理——高级

时间:2020-01-25 22:17:57      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:imp   class   col   set   turn   空格   tor   amp   namespace   

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

注意 fake<=N&&fake+neutral>=N 即假话数量不大于N,假话加上没用的废话数量不小于N

(注意OJ上的数据存在问题:冒号后跟一个空格,CHARLES的话最后的句号‘.’应为半角,非全角)

  1 /*
  2 Written By StelaYuri
  3 */
  4 #include<bits/stdc++.h>
  5 using namespace std;
  6 typedef pair<int,int> Par;
  7 typedef pair<int,Par> Pr;
  8 int M,N,P,ans,f[25];
  9 char s1[300],s2[300],s3[300];
 10 string dayStr[7]={
 11     "Monday"
 12     ,"Tuesday"
 13     ,"Wednesday"
 14     ,"Thursday"
 15     ,"Friday"
 16     ,"Saturday"
 17     ,"Sunday"
 18 };
 19 vector<string> name;
 20 map<string,int> mp;
 21 Pr prd[105];
 22 inline int readDigit(){
 23     int x=0;char c=getchar();
 24     while(!isdigit(c))c=getchar();
 25     for(;isdigit(c);c=getchar())x=x*10+c-0;
 26     return x;
 27 }
 28 inline void readName(){
 29     char c;int i=0;
 30     while((c=getchar())!=\n)s1[i++]=c;
 31     s1[i]=\0;
 32 }
 33 inline void readSubj(){
 34     char c;int i=0;
 35     while((c=getchar())!= )s2[i++]=c;
 36     s2[i-1]=\0;
 37 }
 38 inline void readWords(){
 39     char c;int i=0;
 40     while((c=getchar())!=\n)s3[i++]=c;
 41     s3[i]=\0;
 42 }
 43 int main(){
 44     int i,j,day,gty,fake,neutral,subid;
 45     string sd;
 46     bool jd,prim;
 47     M=readDigit();
 48     N=readDigit();
 49     P=readDigit();
 50     for(i=0;i<M;i++){
 51         readName();
 52         name.push_back(s1);
 53         mp[s1]=i;
 54     }
 55     for(i=0;i<P;i++){
 56         readSubj();
 57         readWords();
 58         sd=s3;
 59         subid=mp[s2];
 60         if(sd=="I am guilty.")
 61             prd[i]=Pr(1,Par(subid,subid));
 62         else if(sd=="I am not guilty.")
 63             prd[i]=Pr(2,Par(subid,subid));
 64         else{
 65             jd=false;
 66             for(j=0;!jd&&j<7;j++)
 67                 if(sd=="Today is "+dayStr[j]+"."){
 68                     prd[i]=Pr(3,Par(subid,j));
 69                     jd=true;
 70                     break;
 71                 }
 72             for(j=0;!jd&&j<M;j++){
 73                 if(sd==name[j]+" is guilty."){
 74                     prd[i]=Pr(1,Par(subid,j));
 75                     jd=true;
 76                     break;
 77                 }
 78                 else if(sd==name[j]+" is not guilty."){
 79                     prd[i]=Pr(2,Par(subid,j));
 80                     jd=true;
 81                     break;
 82                 }
 83             }
 84             if(!jd)
 85                 prd[i]=Pr(4,Par(0,0));
 86         }
 87     }
 88     for(jd=false,day=0;day<7;day++){
 89         for(gty=0;gty<M;gty++){
 90             memset(f,0,sizeof f);
 91             prim=true;
 92             for(i=0;i<P;i++){
 93                 if(prd[i].first==1){
 94                     if(prd[i].second.second==gty){
 95                         if(!f[prd[i].second.first])
 96                             f[prd[i].second.first]=1;
 97                         else if(f[prd[i].second.first]==2){
 98                             prim=false;
 99                             break;
100                         }
101                     }
102                     else{
103                         if(!f[prd[i].second.first])
104                             f[prd[i].second.first]=2;
105                         else if(f[prd[i].second.first]==1){
106                             prim=false;
107                             break;
108                         }
109                     }
110                 }
111                 else if(prd[i].first==2){
112                     if(prd[i].second.second!=gty){
113                         if(!f[prd[i].second.first])
114                             f[prd[i].second.first]=1;
115                         else if(f[prd[i].second.first]==2){
116                             prim=false;
117                             break;
118                         }
119                     }
120                     else{
121                         if(!f[prd[i].second.first])
122                             f[prd[i].second.first]=2;
123                         else if(f[prd[i].second.first]==1){
124                             prim=false;
125                             break;
126                         }
127                     }
128                 }
129                 else if(prd[i].first==3){
130                     if(prd[i].second.second==day){
131                         if(!f[prd[i].second.first])
132                             f[prd[i].second.first]=1;
133                         else if(f[prd[i].second.first]==2){
134                             prim=false;
135                             break;
136                         }
137                     }
138                     else{
139                         if(!f[prd[i].second.first])
140                             f[prd[i].second.first]=2;
141                         else if(f[prd[i].second.first]==1){
142                             prim=false;
143                             break;
144                         }
145                     }
146                 }
147             }
148             if(!prim)
149                 continue;
150             neutral=fake=0;
151             for(i=0;i<M;i++)
152                 if(f[i]==0)
153                     neutral++;
154                 else if(f[i]==2)
155                     fake++;
156             if(fake<=N&&fake+neutral>=N){
157                 if(!jd){
158                     jd=true;
159                     ans=gty;
160                 }
161                 else if(jd&&ans!=gty){
162                     puts("Cannot Determine");
163                     return 0;
164                 }
165             }
166         }
167     }
168     if(jd)
169         puts(name[ans].data());
170     else
171         puts("Impossible");
172     
173     return 0;
174 }

 

ZJNU 1205 - 侦探推理——高级

标签:imp   class   col   set   turn   空格   tor   amp   namespace   

原文地址:https://www.cnblogs.com/stelayuri/p/12233440.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!