您的位置:首页 > 其它

xth的第 12 枚硬币(codevs 1366)

2016-09-30 20:46 253 查看
题目描述 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 it
is light.

数据范围及提示 Data Size & Hint

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

/*
找不对等次数最多的硬币
*/
#include<cstdio>
#include<iostream>
#define M 14
using 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: