zoukankan      html  css  js  c++  java
  • 题解【CF1154A】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).

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

    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}).

    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 4

    Output1:

    2 1 3

    Input2:

    40 40 40 60

    Output2:

    20 20 20

    Input3:

    201 101 101 200

    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
    ", x[4] - x[1], x[4] - x[2], x[4] - x[3]);//分别输出a、b、c。
    }
    
    int main()//进入干净整洁的主函数
    {
    	init();//输入
    	solve();//排序解决问题
    	output();//输出
    	return 0;//养成return 0的好习惯
    }
    
  • 相关阅读:
    问题-[DelphiXE2]提示第三控件不存在
    问题-[DelphiXE2]编译程序体积大的问题
    问题-[delphi2007、2010]无法二次启动,报EditorLineEnds.ttr被占用,进程一直有bds.exe?
    问题-[VMware Workstation]断电后,重启电脑,之后就提示“内部错误”
    问题-[Delphi]通过Map文件查找内存地址出错代码所在行
    问题-[WIN8.132位系统]安装Win8.1 遇到无法升级.NET Framework 3.5.1
    问题-[DelphiXE7]新建的安桌模拟器运行程序闪退
    问题-[Delphi]用LoadLibrary加载DLL时返回0的错误
    问题-[Access]“无法打开工作组信息文件中的表 'MSysAccounts'”的问题的解决方法
    教程-Delphi 调用控制面板设置功能
  • 原文地址:https://www.cnblogs.com/xsl19/p/11104948.html
Copyright © 2011-2022 走看看