额,这个题原本也是挂到hash上的,结果又是水题
......
#include <iostream>
#include <cstring>
#include <cstring>
#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;
char a[100],l[30],r[30],w[30];
int vis[30];
void ori(){
for(int i=0;i<30;i++)vis[i]=4;//4 unknown 0 true +heavy -light
}
int main(){
int n;
scanf("%d",&n);
getchar();
while(n--){
ori();
int ans,k;
for(int i=0;i<3;i++){
gets(a);
sscanf(a,"%s%s%s",&l,&r,&w);
if(w[0]=='e'){
int len=strlen(l);
for(int j=0;j<len;j++){
int t1=l[j]-'A',t2=r[j]-'A';
vis[t1]=vis[t2]=0;
}
}
if(w[0]=='u'){
int len=strlen(l);
for(int j=0;j<len;j++){
int t1=l[j]-'A',t2=r[j]-'A';
if(vis[t1]!=0){
if(vis[t1]==4){
vis[t1]=-1;
}
else if(vis[t1]>0)vis[t1]=0;
else vis[t1]--;
}
if(vis[t2]!=0){
if(vis[t2]==4){
vis[t2]=1;
}
else if(vis[t2]<0)vis[t2]=0;
else vis[t2]++;
}
}
}
if(w[0]=='d'){
int len=strlen(l);
for(int j=0;j<len;j++){
int t1=l[j]-'A',t2=r[j]-'A';
if(vis[t1]!=0){
if(vis[t1]==4){
vis[t1]=1;
}
else if(vis[t1]<0)vis[t1]=0;
else vis[t1]++;
}
if(vis[t2]!=0){
if(vis[t2]==4){
vis[t2]=-1;
}
else if(vis[t2]>0)vis[t2]=0;
else vis[t2]--;
}
}
}
}
k=0;
for(int j=0;j<30;j++){
if(abs(vis[j])>k&&vis[j]!=4){
k=abs(vis[j]);
ans=j;
}
}
if(vis[ans]>0)
printf("%c is the counterfeit coin and it is light.\n",'A'+ans);
else
printf("%c is the counterfeit coin and it is heavy.\n",'A'+ans);
}
return 0;
}