对题意的一点疑问

P1039 [NOIP2003 提高组] 侦探推理

只有一句没问题吧······
by UnyieldingTrilobite @ 2020-03-10 12:24:01


@[_26535_](/user/203623) 这个数据应该是2人都说谎,那HELLO说不guilty就是guilty了咯
by UnyieldingTrilobite @ 2020-03-10 12:24:38


@[return20071007](/user/250637) 不是说“证词中出现的其他话,都不列入逻辑推理的内容。”,那只有一句“HELLO: I am not guilty.”是有效的,最多也只有一句谎话,那也无法满足有2个人说慌这个条件呀
by critnos @ 2020-03-10 12:28:35


窝就谔谔,你没听懂吧
by UnyieldingTrilobite @ 2020-03-10 12:31:03


@[return20071007](/user/250637) 您的意思是,不说话的人可以当作说真/假话的?
by critnos @ 2020-03-10 12:49:42


@[_26535_](/user/203623) 是吧,反正不说话
by UnyieldingTrilobite @ 2020-03-10 12:50:38


@[return20071007](/user/250637) 很玄学,在本地和IDE都过了这个点,但是测评就过不了,您能帮我康康吗 ```cpp #include<bits/stdc++.h> using namespace std; map<string,int> a,b; vector<int> zfl[105],rq[105],tr[105]; string zuifanlist[25]; int main() { b["Monday."]=1; b["Tuesday."]=2; b["Wednesday."]=3; b["Thursday."]=4; b["Friday."]=5; b["Saturday."]=6; b["Sunday."]=7; string fname,mz,hua,hua2; int i,n,m,p,j,w,w2,fl,k,l,no,thi,sum,zuifan=0,summ; cin>>m>>n>>p; for(i=1;i<=m;i++) { cin>>zuifanlist[i]; a[zuifanlist[i]]=i; } for(i=0;i<p;i++) { cin>>fname>>mz; fname.erase(fname.end()-1); w=a[fname],w2=a[mz]; if(mz=="Today") { cin>>hua>>mz; hua2=""; getline(cin,hua2); w2=b[mz]; if(hua=="is"&&hua2==""&&w2&&w) rq[w].push_back(w2); continue; } getline(cin,hua); if(w==0) continue; if(mz=="I"&&hua==" am guilty.") tr[w].push_back(1),zfl[w].push_back(w); else if(mz=="I"&&hua==" am not guilty.") tr[w].push_back(0),zfl[w].push_back(w); else { if(w2==0) continue; if(hua==" is guilty.") tr[w].push_back(1),zfl[w].push_back(w2); if(hua==" is not guilty.") tr[w].push_back(0),zfl[w].push_back(w2); } } // for(i=1;i<=m;i++) // { // for(j=0;j<rq[i].size();j++) cout<<rq[i][j]<<' '; // cout<<'\\'; // for(j=0;j<zfl[i].size();j++) cout<<zfl[i][j]<<' '; // cout<<endl; // } for(i=1;i<=7;i++) { for(j=1;j<=m;j++) { summ=sum=no=0; for(k=1;k<=m;k++) { fl=-1; for(l=0;l<rq[k].size();l++) { thi=rq[k][l]==i; if(fl!=thi&&fl!=-1) { no=1; break; } fl=thi; } if(no) break; for(l=0;l<zfl[k].size();l++) { if(tr[k][l]) thi=zfl[k][l]==j; else thi=zfl[k][l]!=j; if(fl!=thi&&fl!=-1) { no=1; break; } fl=thi; } if(no) break; if(fl==0) sum++; if(fl==-1) summ++; } if(no==0&&sum<=n&&sum+summ>=n) { if(zuifan&&zuifan!=j) { cout<<"Cannot Determine"; return 0; } zuifan=j; } } } if(zuifan) cout<<zuifanlist[zuifan]; else cout<<"Impossible"; } //2 2 4 //HELLO //GUILTY //HELLO: What is your name? //GUILTY: I am GUILTY. //GUILTY: Are you guilty? //HELLO: I am not guilty. ```
by critnos @ 2020-03-10 13:33:17


@[return20071007](/user/250637) 谢谢,A了!
by critnos @ 2020-03-10 13:56:04


|