• Codeforces 344B Simple Molecules


    Description

    Mad scientist Mike is busy carrying out experiments in chemistry. Today he will attempt to join three atoms into one molecule.

    A molecule consists of atoms, with some pairs of atoms connected by atomic bonds. Each atom has a valence number — the number of bonds the atom must form with other atoms. An atom can form one or multiple bonds with any other atom, but it cannot form a bond with itself. The number of bonds of an atom in the molecule must be equal to its valence number.

    Mike knows valence numbers of the three atoms. Find a molecule that can be built from these atoms according to the stated rules, or determine that it is impossible.

    Input

    The single line of the input contains three space-separated integers a, b and c (1 ≤ a, b, c ≤ 106) — the valence numbers of the given atoms.

    Output

    If such a molecule can be built, print three space-separated integers — the number of bonds between the 1-st and the 2-nd, the 2-nd and the 3-rd, the 3-rd and the 1-st atoms, correspondingly. If there are multiple solutions, output any of them. If there is no solution, print "Impossible" (without the quotes).

    Sample Input

    Input
    1 1 2
    Output
    0 1 1
    Input
    3 4 5
    Output
    1 3 2
    Input
    4 1 1
    Output
    Impossible

    题意:这道题告诉你3个节点的度数,也就是相邻两点的边的数目,例如:我们定义这三个顶点分别是a,b,c,设第一个点和第二个点之间的边的数目为x,第二个点与第三个点之间的边的数目为y,第三个点与第四个
    点之间的边的数目为z,那么a = x + z, b = x + y, c = y + z;而且根据握手定理: 顶点度数之和为变得2倍,所以顶点度数和为偶数,而且两点见得边数不小于0. 有个疑点是为什么x = a +b - c?
     1 /*************************************************************************
     2     > File Name: cf.cpp
     3     > Author: PrayG
     4     > Mail: 
     5     > Created Time: 2016年07月10日 星期日 12时57分34秒
     6  ************************************************************************/
     7 
     8 #include<iostream>
     9 #include<cstdio>
    10 #include<bits/stdc++.h>
    11 #include<string>
    12 using namespace std;
    13 const int maxn = 200005;
    14 int main()
    15 {
    16     int a,b,c;
    17     cin >> a >> b >> c;
    18     int x ,y,z;
    19     int sum;
    20     sum = a+ b + c;
    21     x = a + b - c;
    22     y = b + c - a;
    23     z = a + c - b;
    24     if(x < 0 || y < 0 || z < 0|| sum%2)
    25     {
    26         printf("Impossible
    ");
    27     }
    28     else
    29     {
    30         printf("%d %d %d
    ",x/2,y/2,z/2);
    31     }
    32     return 0;
    33 }
    View Code



  • 相关阅读:
    Webx5 label的取值和赋值(div)
    webx5 复选框的显示
    WebX5 Data遍历以及获取数组最后一个元素(更新)
    API集市--分享API
    WebX5 Data判断当前行的值是否改变,以及改变当前行的状态
    WebX5手机GPS定位,无需开启网络
    JS:var 变量=变量 && 变量
    jQuery的ready ()的几种写法
    .net 微信支付(公众号支付)遇到的问题
    .net中的Dictionary字典类的使用方法
  • 原文地址:https://www.cnblogs.com/PrayG/p/5658022.html
Copyright © 2020-2023  润新知