天平称重找非标准法码,直接模拟即可
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
using namespace std;
namespace
{
bool valid(const string &left, const string &right, const string &flag,
int *w)
{
int l = 0, r = 0;
for (size_t i = 0; i < left.size(); i++)
l += w[left[i] - 'A'];
for (size_t i = 0; i < left.size(); i++)
r += w[right[i] - 'A'];
if (flag == "up")
return l > r;
else if (flag == "down")
return l < r;
else
return l == r;
}
}
int main()
{
int n, w[12];
cin >> n >> ws;
string s[9];
while (n--)
{
for (int i = 0; i < 9; i++)
cin >> s[i];
bool find = false;
for (int i = 0; i < 12 && !find; i++)
for (int j = 0; j < 2; j++)
{
memset(w, 0, sizeof(w));
w[i] = j ? 1 : -1;
if (valid(s[0], s[1], s[2], w) && valid(s[3], s[4], s[5], w)
&& valid(s[6], s[7], s[8], w))
{
printf("%c is the counterfeit coin and it is %s.\n",
i + 'A', j ? "heavy" : "light");
find = true;
break;
}
}
}
return 0;
}