首页 > 代码库 > xth的第 12 枚硬币(codevs 1366)

xth的第 12 枚硬币(codevs 1366)

题目描述 Description

传说 xth 曾经拥有11枚完全相同硬币(你懂得),不过今年呢,rabbit又送了他一
枚硬币。这枚硬币和其他硬币外观相同,只有重量不同,或轻或重。Xth 一不小心,
将这枚特殊的硬币和其他硬币混在了一起。Rabbit 知道后很生气,要他立刻把那枚
硬币找出来,并且还要说出这枚硬币是轻还是重。可怜的 Xth 只有一架普通托盘天
平,并且只能称量三次(每次称量,两边各四枚)。现在全部 12枚硬币编号为
A~L,现给出你三次称量的结果,请你帮 xth 找出那枚不一样的硬币。他一定会感
谢你们滴~~~

输入描述 Input Description

共三行,每行是由空格隔开的两个字符串,分别代表左右两盘的四个硬币,以及一
个单词。’even’表示两侧重量相等,’up’表示右侧轻,’down’表示右侧重。

输出描述 Output Description

一行,一个英文句子,指出那枚不一样的硬币以及它的轻重情况。
X is the counterfeit coin and it is light/heavy. (X表示硬币)

样例输入 Sample Input

ABCD EFGH even 
ABCI EFJK up 
ABIJ EFGH even

样例输出 Sample Output

K is the counterfeit coin and itis light.

数据范围及提示 Data Size & Hint

 

数据保证有且仅有一枚特殊的硬币,无矛盾情况出现。

技术分享
/*  找不对等次数最多的硬币 */#include<cstdio>#include<iostream>#define M 14using namespace std;int f[M],vis[M];char s1[5],s2[5],s3[5];int main(){    for(int T=1;T<=3;T++)    {        cin>>s1>>s2>>s3;        if(s3[0]==e)        {            for(int i=0;i<=3;i++)            {                f[s1[i]-A+1]=f[s2[i]-A+1]=1;                vis[s1[i]-A+1]=vis[s2[i]-A+1]=0;            }        }        else if(s3[0]==u)        {            for(int i=0;i<=3;i++)            {                if(f[s1[i]-A+1]==3)vis[s1[i]-A+1]++;                if(!f[s1[i]-A+1])f[s1[i]-A+1]=3,vis[s1[i]-A+1]++;                if(f[s1[i]-A+1]==2)f[s1[i]-A+1]=1;                if(f[s2[i]-A+1]==2)vis[s2[i]-A+1]++;                if(!f[s2[i]-A+1])f[s2[i]-A+1]=2,vis[s2[i]-A+1]++;                if(f[s2[i]-A+1]==3)f[s2[i]-A+1]=1;            }        }        else        {            for(int i=0;i<=3;i++)            {                if(f[s1[i]-A+1]==2)vis[s1[i]-A+1]++;                if(!f[s1[i]-A+1])f[s1[i]-A+1]=2,vis[s1[i]-A+1]++;                if(f[s1[i]-A+1]==3)f[s1[i]-A+1]=1;                if(f[s2[i]-A+1]==3)vis[s2[i]-A+1]++;                if(!f[s2[i]-A+1])f[s2[i]-A+1]=3,vis[s2[i]-A+1]++;                if(f[s2[i]-A+1]==2)f[s2[i]-A+1]=1;            }        }    }    int tot=0,ans=0;    for(int i=1;i<=12;i++)      if(vis[i]>tot)      {          tot=vis[i];          ans=i;      }    if(f[ans]==2)printf("%c is the counterfeit coin and it is light.",ans+A-1);    else printf("%c is the counterfeit coin and it is heavy.",ans+A-1);    return 0;}
View Code

 

xth的第 12 枚硬币(codevs 1366)