题解[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\).

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\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的好习惯
}

原文地址:https://www.cnblogs.com/xsl19/p/11104948.html

时间: 2024-08-01 20:05:02

题解[CodeForces1154A]Restoring Three Numbers的相关文章

LeetCode题解之Find All Numbers Disappeared in an Array

1.题目描述 2.问题分析 使的 A[i] = i+1 ,最后检查不满足这个条件的i+1 .即为缺失的值. 3.代码 1 vector<int> findDisappearedNumbers(vector<int>& nums) { 2 for( int i = 0; i < nums.size() ; ++i ){ 3 if( nums[i] != nums[ nums[i] - 1 ] ){ 4 swap( nums[i] , nums[nums[i] - 1]

题解 CF47A 【Triangular numbers】

这题其实就是高斯求和问题,即1+...+x=x(x+1)/2. 由此,我们就可以用递推的思想来解决问题: include<bits/stdc++.h> using namespace std; int main() { //freopen("ask.in","r",stdin); //freopen("ask.out","w",stdout); long long n,r=0; cin>>n; for(

LeetCode: Add Two Numbers 题解

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. Input: (2 -> 4 -> 3) + (5 -> 6 ->

codeforces 509D Restoring Numbers

codeforces 509D Restoring Numbers 题意: v[i][j]=(a[i]+b[j])%k 现在给出n*m矩阵v[][], 求a[],b[]和k, 任意一种情况都行. 限制: 1 <= n,m <= 100; 0 <= v[i][j] <= 100 思路: 对于数组a[], 无论怎么变, 数组之间的差始终不变, b[]也同理 利用这个求出k 再设a[0]=0,b[0]=0,求出剩下的东西.

【优先队列基础练习】POJ1338 Uva136 - Ugly Numbers题解

昨天夜里学了栈.队列和优先队列,栈还有的地方不大懂,队列基本可以,优先队列很高兴.本想今天上午继续弄这个,但是跟着李晨他们一块听了清华交院罗雨屏老师讲的计算几何= =虽然以我的水平听计算几何有点早,但至少是听懂了很多,感觉很高兴:十点多就没有再听,毕竟之后越来越深亚历山大.于是就来写一下丑数的题解. 题目:除2,3,5外不能被其他素数整除的数为丑数,求第1500个丑数(Uva版),求第n(n<=1500)个丑数(POJ版) 思路:第一个是1,放入升序优先队列(小的先出),之后每次出队第一个元素,

Restoring Numbers

D. Restoring Numbers Vasya had two arrays consisting of non-negative integers: a of size n and b of size m. Vasya chose a positive integerk and created an n × m matrix v using the following formula: Vasya wrote down matrix v on a piece of paper and p

POJ 3252 Round Numbers 数学题解

Description The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, Paper, Stone' (also known as 'Rock, Paper, Scissors', 'Ro, Sham, Bo', and a host of other names) in order to make arbitrary decisions such as who gets

【题解】【数组】【Prime and composite numbers】【Codility】Flags

A non-empty zero-indexed array A consisting of N integers is given. A?peak?is an array element which is larger than its neighbours. More precisely, it is an index P such that 0 < P < N ? 1 and A[P ? 1] < A[P] > A[P + 1]. For example, the follo

【题解】【数组】【Prime and composite numbers】【Codility】Peaks

A non-empty zero-indexed array A consisting of N integers is given. A?peak?is an array element which is larger than its neighbors. More precisely, it is an index P such that 0 < P < N ? 1,? A[P ? 1] < A[P] and A[P] > A[P + 1]. For example, the