POJ1013
枚举
#include<iostream>
#include<cstring>
using namespace std;
char Left[3][7];
char Right[3][7];
char res[3][7];
//假设c为假币
bool isFake(char c, bool light){
//light为真表示假设假币为轻,否则表示假设假币为重
for(int i=0;i<3;i++){
char *pLeft, *pRight; //指向天平两边的字符串
if(light){
pLeft = Left[i];
pRight = Right[i];
}else{ //如果假设假币是重的,则把称量结果左右对换
pLeft = Right[i];
pRight = Left[i];
}
switch(res[i][0]){
case 'u':
if(strchr(pRight, c) == NULL) return false; //右边天平没找到
break;
case 'e':
if(strchr(pLeft, c) || strchr(pRight, c)) return false; //在左右天平任一位置找到
break;
case 'd':
if(strchr(pLeft, c)==NULL) return false;
break;
}
}
return true;
}
int main(){
int t;
cin >> t;
while(t--){
for(int i=0; i<3; i++) cin>>Left[i]>>Right[i]>>res[i];
for(char c='A'; c<='L'; c++){
if(isFake(c,true)){
cout<<c<<" is the counterfeit coin and it is light. \n";
break;
}else if(isFake(c, false)){
cout<<c<<" is the counterfeit coin and it is heavy. \n";
break;
}
}
}
return 0;
}