codeforces Simple Molecules

October 2, 2013
CodeForces

link:http://codeforces.com/contest/344/problem/B

刚开始想复杂了。一开始就想当然地以为可以有多个点,其实,人家题目要求只有3个点啊!

然后题目就简单了。

img

A、B、C代表原子的化合价

x、y、z代表原子之间的化学键

首先x+y+z一定为偶数,否则不可能有解。

那么可以列出一个三元一次的方程组,由3个方程组成,可以求出唯一解。

判断有解的唯一限制条件是:不能出现负数。

#include <cstdlib>
#include <cstdio>
#include <cmath>
int main(void)
{
  #ifndef ONLINE_JUDGE
  freopen("in.txt", "r", stdin);
  #endif // ONLINE_JUDGE
  int a, b, c;
  int x, y, z;
  while (~scanf("%d%d%d", &a, &b, &c))
  {
    int sum = a + b + c;
    if (sum & 1)
    {
      printf("Impossible\n"); continue;
    }
    int tmp = b - a + c;
    if (tmp & 1)
    {
      printf("Impossible\n");
      continue;
    }
    y = tmp >> 1;
    z = c - y;
    x = a - z;
    if (x < 0 || y < 0 || z < 0)
    {
      printf("Impossible\n");
      continue;
    }
    printf("%d %d %d\n", x, y, z);
  }

  return 0;
}

看题要认真。不把问题复杂化。

comments powered by Disqus