因为答案只有12*2 =24种,枚举每一种可能就可以了
#include<iostream>
#include<map>
#include<string>
#include<algorithm>
#include<fstream>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<math.h>
using namespace std;
#define lch(i) ((i)<<1)
#define rch(i) ((i)<<1|1)
#define sqr(i) ((i)*(i))
#define pii pair<int,int>
#define mp make_pair
#define FOR(i,b,e) for(int i=b;i<=e;i++)
#define FORE(i,b,e) for(int i=b;i>=e;i--)
#define ms(a) memset(a,0,sizeof(a))
const int maxnum =21252;
const int mod = 10007;
int n;
struct node
{
char l[7],r[7],stat[5];
}scale[3];
int coin[12];
bool ins(char c,char* s){
int len = strlen(s);
FOR(i,0,len-1){
if(c==s[i])
return true;
}
return false;
}
//
//#define _DEBUG_
int main()
{
#ifdef _DEBUG_
fstream fin("G:/1.txt");
#else
#define fin cin
#endif
fin>>n;
FOR(i,1,n){
ms(scale);
FOR(i,0,11) coin[i]=2;
FOR(i,0,2){
fin>>scale[i].l>>scale[i].r>>scale[i].stat;
if(scale[i].stat[0]=='e'){
int len=strlen(scale[i].l);
FOR(j,0,len-1){
coin[scale[i].l[j]-'A']=coin[scale[i].r[j]-'A']=0;
}
}
}
int flag = 0;
FOR(i,0,11){
if(coin[i]==0)continue;
int f1,f2;
flag=1;
FOR(j,0,2){
if(scale[j].stat[0]=='e')
continue;
f1 = ins('A'+i,scale[j].l);
f2 = ins('A'+i,scale[j].r);
if(!f1&&!f2){
flag=0;
coin[i]=0;break;
}
if(scale[j].stat[0]=='u'){
if(f1){
if(coin[i]==-1){
flag=0;
break;
}
coin[i]=1;
}
else{
if(coin[i]==1){
flag=0;break;
}
coin[i]=-1;
}
}else{
if(f1){
if(coin[i]==1){
flag=0;
break;
}
coin[i]=-1;
}
else{
if(coin[i]==-1){
flag=0;break;
}
coin[i]=1;
}
}
}
if(flag){
printf("%c is the counterfeit coin and it is ",i+'A');
if(coin[i]<0)
printf("light.\n");
else
printf("heavy.\n");
break;
}
}
}
return 0;
}