http://acm.pku.edu.cn/JudgeOnline/problem?id=1013

Код:
#include <stdio.h>
#include <string.h>
#define MAXN 5
#define MAXL 20

char  arg[2][10] = {"light","heavy"};
char  equ[MAXN][2][MAXL];
char  bal[MAXN][MAXL];
int   val[MAXL];
int   ball;
int   weight;
int   task;

void solve()
{
   int i,j,k,flag;
   int left,right;
   char ch;
   for (ch = 'A'; ch <= 'L'; ch++)
   for (k = 0; k < 2; k++) 
   {
      for (i = 0; i < 12 ; i++)
         if (ch - 'A' != i) val[i] = 0;
      if (k) val[ch - 'A'] = 1; else val[ch - 'A'] = -1;
      flag = 1;
      for (i = 0; i < 3; i++)
      {
         left = 0; right = 0;
         for (j = 0; j < strlen(equ[i][0]); j++) 
         {
            left  += val[equ[i][0][j]-'A'];
            right += val[equ[i][1][j]-'A'];
         }
         if (left >= right && (strcmp(bal[i],"down") == 0))
        {
            flag = 0;
            break;
         }
         if (left <= right && (strcmp(bal[i],"up") == 0))
         {
            flag = 0;
            break;
         }
         if (left != right && (strcmp(bal[i],"even") == 0))
         {
            flag = 0;
            break;
         }
      }   
      if (flag)
      {
         ball = ch;
         weight = k;
         return;
      }
   }
}

int main()
{
   int i;
   scanf("%d",&task);
   while (task--)
   {
      for (i = 0; i < 3; i++)
         scanf("%s%s%s",equ[i][0],equ[i][1],bal[i]);
      solve();
      printf("%c is the counterfeit coin and it is %s.\n",ball,arg[weight]);
   }
   return 0;
}