标签:poj
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 42028 | Accepted: 13369 |
Description
Input
Output
Sample Input
1 ABCD EFGH even ABCI EFJK up ABIJ EFGH even
Sample Output
K is the counterfeit coin and it is light.
题意是从A到L的dollar,其中有一个跟他们其它的不同,可能是轻了也可能是重了。给了三个在秤上的关系,要你判断出哪一个是伪造的dollar,是轻是重。
做的时候还WA了几次,但AC之后觉得这个题真是水啊。。。不知道为什么只要自己好不容易A完之后就觉得这个题真的很水,为什么当时没有想到呢?就是这种感觉。
咳咳,因为这个题就A到L之中有问题嘛,数据量太小,导致枚举就OK了。所以从A开始就一个一个试吧,如果在even中的语句里出现了,那就排除它的嫌疑。在up语句中出现了,它的flag加3,代表可能是轻的标记。在down语句中出现了,它自己的flag加4,代表可能是重的标记。
然后对12个砝码标记完之后,有标记为1的排除,标记为7 10 11这样的排除,因为不可能出现一个砝码既轻又重的情况,然后找最独特的那一个就是伪造的砝码了。输出即可。
代码:
#include <iostream> #include <algorithm> #include <cmath> #include <vector> #include <string> #include <cstring> #include <map> using namespace std; int num[15]; int Test,i,j,flag[15],sum=0; string left_s[5],right_s[5],bala[5]; char temp_c; void solve() { if(bala[1]=="up") { for(j=0;j<left_s[1].length();j++) { if(left_s[1][j]==temp_c) { sum=1; cout<<temp_c<<" is the counterfeit coin and it is "; cout<<"heavy."<<endl; return ; } } for(j=0;j<right_s[1].length();j++) { if(right_s[1][j]==temp_c) { sum=1; cout<<temp_c<<" is the counterfeit coin and it is "; cout<<"light."<<endl; return; } } } if(bala[2]=="up") { for(j=0;j<left_s[2].length();j++) { if(left_s[2][j]==temp_c) { sum=1; cout<<temp_c<<" is the counterfeit coin and it is "; cout<<"heavy."<<endl; return; } } for(j=0;j<right_s[2].length();j++) { if(right_s[2][j]==temp_c) { sum=1; cout<<temp_c<<" is the counterfeit coin and it is "; cout<<"light."<<endl; return; } } } if(bala[3]=="up") { for(j=0;j<left_s[3].length();j++) { if(left_s[3][j]==temp_c) { sum=1; cout<<temp_c<<" is the counterfeit coin and it is "; cout<<"heavy."<<endl; return ; } } for(j=0;j<right_s[3].length();j++) { if(right_s[3][j]==temp_c) { sum=1; cout<<temp_c<<" is the counterfeit coin and it is "; cout<<"light."<<endl; return ; } } } if(bala[1]=="down") { for(j=0;j<left_s[1].length();j++) { if(left_s[1][j]==temp_c) { sum=1; cout<<temp_c<<" is the counterfeit coin and it is "; cout<<"light."<<endl; return; } } for(j=0;j<right_s[1].length();j++) { if(right_s[1][j]==temp_c) { sum=1; cout<<temp_c<<" is the counterfeit coin and it is "; cout<<"heavy."<<endl; return ; } } } if(bala[2]=="down") { for(j=0;j<left_s[2].length();j++) { if(left_s[2][j]==temp_c) { sum=1; cout<<temp_c<<" is the counterfeit coin and it is "; cout<<"light."<<endl; return; } } for(j=0;j<right_s[2].length();j++) { if(right_s[2][j]==temp_c) { sum=1; cout<<temp_c<<" is the counterfeit coin and it is "; cout<<"heavy."<<endl; return ; } } } if(bala[3]=="down") { for(j=0;j<left_s[3].length();j++) { if(left_s[3][j]==temp_c) { sum=1; cout<<temp_c<<" is the counterfeit coin and it is "; cout<<"light."<<endl; return; } } for(j=0;j<right_s[3].length();j++) { if(right_s[3][j]==temp_c) { sum=1; cout<<temp_c<<" is the counterfeit coin and it is "; cout<<"heavy."<<endl; return ; } } } } bool pend() { int pend_flag=0; if(bala[1]=="up") { for(j=0;j<left_s[1].length();j++) { if(left_s[1][j]==temp_c) { pend_flag=1; } } for(j=0;j<right_s[1].length();j++) { if(right_s[1][j]==temp_c) { pend_flag=1; } } if(pend_flag==0) return false; } if(bala[2]=="up") { for(j=0;j<left_s[2].length();j++) { if(left_s[2][j]==temp_c) { pend_flag=1; } } for(j=0;j<right_s[2].length();j++) { if(right_s[2][j]==temp_c) { pend_flag=1; } } if(pend_flag==0) return false; } if(bala[3]=="up") { for(j=0;j<left_s[3].length();j++) { if(left_s[3][j]==temp_c) { pend_flag=1; } } for(j=0;j<right_s[3].length();j++) { if(right_s[3][j]==temp_c) { pend_flag=1; } } if(pend_flag==0) return false; } if(bala[1]=="down") { for(j=0;j<left_s[1].length();j++) { if(left_s[1][j]==temp_c) { pend_flag=1; } } for(j=0;j<right_s[1].length();j++) { if(right_s[1][j]==temp_c) { pend_flag=1; } } if(pend_flag==0) return false; } if(bala[2]=="down") { for(j=0;j<left_s[2].length();j++) { if(left_s[2][j]==temp_c) { pend_flag=1; } } for(j=0;j<right_s[2].length();j++) { if(right_s[2][j]==temp_c) { pend_flag=1; } } if(pend_flag==0) return false; } if(bala[3]=="down") { for(j=0;j<left_s[3].length();j++) { if(left_s[3][j]==temp_c) { pend_flag=1; } } for(j=0;j<right_s[3].length();j++) { if(right_s[3][j]==temp_c) { pend_flag=1; } } if(pend_flag==0) return false; } return true; } int main() { cin>>Test; while(Test--) { memset(flag,0,sizeof(flag)); memset(num,0,sizeof(num)); sum=0; for(i=1;i<=3;i++) { cin>>left_s[i]>>right_s[i]>>bala[i]; } for(temp_c='A';temp_c<='L';temp_c++) { if(bala[1]=="even") { for(j=0;j<left_s[1].length();j++) { if(left_s[1][j]==temp_c) { flag[temp_c-'A']=1; break; } } for(j=0;j<right_s[1].length();j++) { if(right_s[1][j]==temp_c) { flag[temp_c-'A']=1; break; } } } if(bala[2]=="even") { for(j=0;j<left_s[2].length();j++) { if(left_s[2][j]==temp_c) { flag[temp_c-'A']=1; break; } } for(j=0;j<right_s[2].length();j++) { if(right_s[2][j]==temp_c) { flag[temp_c-'A']=1; break; } } } if(bala[3]=="even") { for(j=0;j<left_s[3].length();j++) { if(left_s[3][j]==temp_c) { flag[temp_c-'A']=1; break; } } for(j=0;j<right_s[3].length();j++) { if(right_s[3][j]==temp_c) { flag[temp_c-'A']=1; break; } } } if(bala[1]=="up") { for(j=0;j<left_s[1].length();j++) { if(left_s[1][j]==temp_c) { if(flag[temp_c-'A']==1) continue; else flag[temp_c-'A'] += 4; } } for(j=0;j<right_s[1].length();j++) { if(right_s[1][j]==temp_c) { if(flag[temp_c-'A']==1) continue; else flag[temp_c-'A'] += 3; } } } if(bala[2]=="up") { for(j=0;j<left_s[2].length();j++) { if(left_s[2][j]==temp_c) { if(flag[temp_c-'A']==1) continue; else flag[temp_c-'A'] += 4; } } for(j=0;j<right_s[2].length();j++) { if(right_s[2][j]==temp_c) { if(flag[temp_c-'A']==1) continue; else flag[temp_c-'A'] += 3; } } } if(bala[3]=="up") { for(j=0;j<left_s[3].length();j++) { if(left_s[3][j]==temp_c) { if(flag[temp_c-'A']==1) continue; else flag[temp_c-'A'] +=4; } } for(j=0;j<right_s[3].length();j++) { if(right_s[3][j]==temp_c) { if(flag[temp_c-'A']==1) continue; else flag[temp_c-'A'] +=3; } } } if(bala[1]=="down") { for(j=0;j<left_s[1].length();j++) { if(left_s[1][j]==temp_c) { if(flag[temp_c-'A']==1) continue; else flag[temp_c-'A'] +=3; } } for(j=0;j<right_s[1].length();j++) { if(right_s[1][j]==temp_c) { if(flag[temp_c-'A']==1) continue; else flag[temp_c-'A'] +=4; } } } if(bala[2]=="down") { for(j=0;j<left_s[2].length();j++) { if(left_s[2][j]==temp_c) { if(flag[temp_c-'A']==1) continue; else flag[temp_c-'A'] +=3; } } for(j=0;j<right_s[2].length();j++) { if(right_s[2][j]==temp_c) { if(flag[temp_c-'A']==1) continue; else flag[temp_c-'A'] +=4; } } } if(bala[3]=="down") { for(j=0;j<left_s[3].length();j++) { if(left_s[3][j]==temp_c) { if(flag[temp_c-'A']==1) continue; else flag[temp_c-'A'] +=3; } } for(j=0;j<right_s[3].length();j++) { if(right_s[3][j]==temp_c) { if(flag[temp_c-'A']==1) continue; else flag[temp_c-'A'] +=4; } } } } for(temp_c='A';temp_c<='L';temp_c++) { num[flag[temp_c-'A']]++; } for(i=0;i<=12;i++) { if(num[i]==1 && i!=7 && i!=10 && i!=11) { for(temp_c='A';temp_c<='L';temp_c++) { if(flag[temp_c-'A']==i) { if(pend()) { solve(); } } } } } } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:poj
原文地址:http://blog.csdn.net/u010885899/article/details/47144115