Counterfeit Dollar (枚举)

~题目连接~

http://poj.org/problem?id=1013

输入

1 
ABCD EFGH even 
ABCI EFJK up 
ABIJ EFGH even 

结果

K is the counterfeit coin and it is light. 

even 都为真,标记(为保持好看,标记写成了累加,最后判断是否为0)

up 右重左轻,分类累加

down 右轻左重,分类累加

k 记录假币出现次数

最后判断未被标记,且与假币出现次数相等的数据(若出现多枚假币,只能说明输入数据错误……^_^……)

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define maxn 30

struct node
{
    int up,down,even;
} Q[maxn];

int main()
{
    int n;
    char L[maxn],R[maxn],S[maxn];
    while(~scanf("%d",&n) && n>0)
    {
        while(n--)
        {
            int i,k=0;
            memset(Q,0,sizeof(Q));
            for(int l=0; l<3; l++)
            {
                scanf("%s%s%s",L,R,S);
                int x=strlen(L);
                int y=strlen(R);
                if(!strcmp(S,"even"))//都为真
                {
                    for(i=0; i<x; i++)
                        Q[L[i]-'A'].even++;
                    for(i=0; i<y; i++)
                        Q[R[i]-'A'].even++;
                }
                if(!strcmp(S,"up"))//右重左轻
                {
                    k++;//计数,用来判断在那一数组(轻 还是 重)
                    for(i=0; i<x; i++)
                        Q[L[i]-'A'].up++;
                    for(i=0; i<y; i++)
                        Q[R[i]-'A'].down++;
                }
                if(!strcmp(S,"down"))//右轻左重
                {
                    k++;
                    for(i=0; i<x; i++)
                        Q[L[i]-'A'].down++;
                    for(i=0; i<y; i++)
                        Q[R[i]-'A'].up++;
                }
            }
            for(int j=0; j<12; j++)
            {
                if(!Q[j].even && Q[j].down==k)//轻假币
                {
                    printf("%c is the counterfeit coin and it is light.\n",j+'A');
                    break;
                }
                else if(!Q[j].even && Q[j].up==k)//重假币
                {
                    printf("%c is the counterfeit coin and it is heavy.\n",j+'A');
                    break;
                }

            }
        }
    }

    return 0;
}

  

  

附带测试数据(注意:这组数据过了后在提交)

sample input 
12 
ABCD EFGH even 
ABCI EFJK up 
ABIJ EFGH even 
AGHL BDEC even 
JKI ADE up 
J K even 
ABCDEF GHIJKL up 
ABC DEF even 
I J down 
ABCDEF GHIJKL up 
ABHLEF GDIJKC down 
CD HA even 
A B up 
B A down 
A C even 
A B up 
B C even 
DEFG HIJL even 
ABC DEJ down 
ACH IEF down 
AHK IDJ down 
ABCD EFGH even 
AB IJ even 
A L down 
EFA BGH down 
EFC GHD even 
BA EF down 
A B up 
A C up 
L K even 
ACEGIK BDFHJL up 
ACEGIL BDFHJK down 
ACEGLK BDFHJI down 
ACEGIK BDFHJL up 
ACEGIL BDFHJK down 
ACEGLK BDFHJI up 

sample output 
K is the counterfeit coin and it is light. 
I is the counterfeit coin and it is heavy. 
I is the counterfeit coin and it is light. 
L is the counterfeit coin and it is light. 
B is the counterfeit coin and it is light. 
A is the counterfeit coin and it is heavy. 
A is the counterfeit coin and it is light. 
L is the counterfeit coin and it is heavy. 
A is the counterfeit coin and it is light. 
A is the counterfeit coin and it is heavy. 
L is the counterfeit coin and it is light. 
K is the counterfeit coin and it is heavy.

  

  ……*_*……

posted @ 2013-08-02 16:51  Locke_Q  阅读(477)  评论(0编辑  收藏  举报