题解【CodeForces1154A】Restoring Three Numbers

Description

Polycarp has guessed three positive integers \(a\), \(b\) and \(c\). He keeps these numbers in secret, but he writes down four numbers on a board in arbitrary order — their pairwise sums (three numbers) and sum of all three numbers (one number). So, there are four numbers on a board in random order: \(a+b\), \(a+c\), \(b+c\) and \(a+b+c\).ios

You have to guess three numbers \(a\), \(b\) and \(c\) using given numbers. Print three guessed integers in any order.c++

Pay attention that some given numbers \(a\), \(b\) and \(c\) can be equal (it is also possible that \(a=b=c\)).数组

Input

The only line of the input contains four positive integers \(x_{1}\),\(x_{2}\),\(x_{3}\),\(x_{4}\)(\(2\)\(x_{i}\)\(10^{9}\)) — numbers written on a board in random order. It is guaranteed that the answer exists for the given number \(x_{1}\),\(x_{2}\),\(x_{3}\),\(x_{4}\).dom

Output

Print such positive integers \(a\), \(b\) and \(c\) that four numbers written on a board are values \(a+b\), \(a+c\), \(b+c\) and \(a+b+c\) written in some order. Print \(a\), \(b\) and \(c\) in any order. If there are several answers, you can print any. It is guaranteed that the answer exists.函数

Examples

Input1:

3 6 5 4spa

Output1:

2 1 3code

Input2:

40 40 40 60排序

Output2:

20 20 20three

Input3:

201 101 101 200ip

Output3:

1 100 100

Solution

简化版题意:

有三个正整数\(a\), \(b\), \(c\), 如今给定\(x_{1}\) \(=\) \(a + b\), \(x_{2}\) \(=\) \(a +c\), \(x_{3}\) \(=\) \(b + c\), \(x_{4}\) \(=\) \(a + b + c\)。 请求出\(a\), \(b\), \(c\)分别是多少。

这是一道数论题。

咱们先整理一下题面告诉咱们的信息:

  1. \(a\)\(b\)\(c\)是三个正整数;

  2. 咱们会输入4个乱序的数字:\(x1\)\(x2\)\(x3\)\(x4\)

  3. \(x_{1}\) = \(a\) + \(b\) , \(x_{2}\) = \(a\) + \(c\) , \(x_{3}\) = \(b\) + \(c\) , \(x_{4}\) = \(a\) + \(b\) + \(c\)

\(a\)\(b\)\(c\)均>\(0\).

\(x_{4}\)是这四个数中最大的数。

至于如何求出\(a\)\(b\)\(c\),则能够:

\(x_{4} - x_{1}\)获得\(c\),用\(x_{4} - x_{2}\)获得\(b\),用\(x_{4} - x_{3}\)获得\(a\),最后按顺序输出这三个数便可。

注意:咱们须要开一个数组\(x\)[]来存储\(x_{1}\)\(x_{2}\)\(x_{3}\)\(x_{4}\),由于这样便于咱们排序(能够直接调用\(c++\)库函数\(sort\),但要开头文件\(algorithm\)),并且能够更好地帮助咱们寻找到\(a\)\(b\)\(c\)

Code

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>//头文件准备

using namespace std;//使用标准名字空间

inline int gi()//快速读入,不解释
{
    int f = 1, x = 0;
    char c = getchar();
    while (c < '0' || c > '9')
    {
        if (c == '-')
            f = -1;
        c = getchar();
    }
    while (c >= '0' && c <= '9')
    {
        x = x * 10 + c - '0';
        c = getchar();
    }
    return f * x;
}

int a, b, c, x[5];//a、b、c和x数组的意义同分析

inline void init()//分别输入这四个数
{
    x[1] = gi(), x[2] = gi(), x[3] = gi(), x[4] = gi();
}

inline void solve()//将x数组从小到大排序
{
    sort(x + 1, x + 1 + 4);//1和4是指从x[1]到x[4]从小到大排序
}

inline void output()//输出的自函数
{
    printf("%d %d %d\n", x[4] - x[1], x[4] - x[2], x[4] - x[3]);//分别输出a、b、c。
}

int main()//进入干净整洁的主函数
{
    init();//输入
    solve();//排序解决问题
    output();//输出
    return 0;//养成return 0的好习惯
}
相关文章
相关标签/搜索