/*
poj 1013 Counterfeit Dollar
题意:一个案例包含三行,每行三个字符串,分别代表左边放的东西和右边放的东西,以及结果,让你分辨出哪个是假的。
题解:脑洞题, 如果even,那么这两边东西一定是真,真的物品我用较大的数表示,这里只有3个数据,100可以算大了。
如果up,那么要么左边东西有假的偏重,要么右边东西有假的偏轻。我们分别附上可能为假的权值(轻-1,重+1)。
如果down,反之。
最后我们只要找是假的权值最大的那个即可。
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 110;
int mp[N];
int main()
{
int T;
cin >> T;
while(T--)
{
memset(mp,0,sizeof(mp));
for(int i = 0; i < 3; i++)
{
string a,b,c;
cin >> a >> b >> c;
if(c == "even")
{
for(int i = 0; i < a.size(); i++)
mp[a[i]-'A'] = 100;
for(int i = 0; i < b.size(); i++)
mp[b[i]-'A'] = 100;
}
else if(c == "up")
{
for(int i = 0; i < a.size(); i++)
mp[a[i]-'A']++;
for(int i = 0; i < b.size(); i++)
mp[b[i]-'A']--;
}
else
{
for(int i = 0; i < a.size(); i++)
mp[a[i]-'A']--;
for(int i = 0; i < b.size(); i++)
mp[b[i]-'A']++;
}
}
int ans = 0;
int id;
for(int i = 0; i < 12; i++)
{
if(mp[i] < 50)
{
if(ans < abs(mp[i]))
{
ans = abs(mp[i]);
id = i;
}
}
}
printf("%c is the counterfeit coin and it is ",id+'A');
if(mp[id] < 0)
printf("light.\n");
else
printf("heavy.\n");
}
return 0;
}
【思维】poj 1013 Counterfeit Dollar
最新推荐文章于 2021-04-16 17:19:27 发布