理解;类似我们离散的命题 因为只有一个是坏的 超过一个人说你坏 你一定就是坏的 有人说你对 你就对了 分为两种情况 1.说你对的是好的 他的判断是正确的 2.说你对的人 是坏的 他的判断是错误的 你是坏的 哈哈哈哈 此时就有两个坏的了 就不合要求了
#include<cstdio> #include<iostream> #include<cstring> using namespace std; struct information { int id,id1,id2; char res1,res2; }k[1005]; int main() { int t; cin>>t; while(t--) { int n; cin>>n; int ct=0,ans; for(int i=0; i<n; i++) { cin>>k[i].id>>k[i].id1>>k[i].res1>>k[i].id2>>k[i].res2; } for(int i=0; i<n; i++) { int flag=1; for(int j=0; j<n; j++) { if(i==j)continue; if(k[j].res1=='N') { if(k[i].id!=k[j].id1){flag=0;break;} } if(k[j].res2=='N') { if(k[i].id!=k[j].id2){flag=0;break;} } if(k[j].res1=='Y') { if(k[i].id==k[j].id1){flag=0;break;} } if(k[j].res2=='Y') { if(k[i].id==k[j].id2){flag=0;break;} } } if(flag) { ct++; ans=i; } } if(ct>1||ct==0) cout<<"impossible"<<endl; else cout<<k[ans].id<<endl; } }
还是思路!!!!!