题解【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\)分别是多少。
这是一道数论题。
我们先整理一下题面告诉我们的信息:
\(a\)、\(b\)、\(c\)是三个正整数;
我们会输入4个乱序的数字:\(x1\)、\(x2\)、\(x3\)、\(x4\);
\(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的好习惯
}
题解【CodeForces1154A】Restoring Three Numbers的更多相关文章
- CF1154A Restoring Three Numbers 题解
Content 已知有三个正整数 \(a,b,c\),现在给出 \(a+b,a+c,b+c,a+b+c\)(不保证有序)的值,试求出 \(a,b,c\). 数据范围:\(2\leqslant a+b, ...
- leetcode题解2. Add Two Numbers
题目: You are given two non-empty linked lists representing two non-negative integers. The digits are ...
- 《LeetBook》LeetCode题解(2):Add Two Numbers [M]
我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...
- LeetCode题解之Find All Numbers Disappeared in an Array
1.题目描述 2.问题分析 使的 A[i] = i+1 ,最后检查不满足这个条件的i+1 .即为缺失的值. 3.代码 vector<int> findDisappearedNumbers( ...
- LeetCode 题解之Add Two Numbers II
1.题目描述 2.分析 首先将链表翻转,然后做加法. 最后将结果链表翻转. 3.代码 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { Lis ...
- LeetCode题解之Add two numbers
1.题目描述 2.题目描述 题目思路可以参考合并单链表的思路,定义一个全局 进位标志,如果两个数值相加得到需要进位,则将进位标志置为1 . 3.代码 ListNode* addTwoNumbers(L ...
- leetCode题解之Self Dividing Numbers
1.题目描述 2.题目分析 简单题目,只要挨个判断该数是不是满足条件即可. 3.代码 vector<int> selfDividingNumbers(int left, int right ...
- LeetCode题解 #2 Add Two Numbers
题目大意:使用链表表示的两个整数,计算出其和,以同样的形式返回. Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 ...
- 题解 CF171A 【Mysterious numbers - 1】
又是愚人节题目qwq-- 说一下题意吧: 把第1个数翻转后加第二个数 具体思路: 1.定义变量,进行输入 int a,b; cin>>a>>b; 2.定义一个变量c,作为存储第 ...
随机推荐
- java学习笔记之IO编程—打印流和BufferedReader
1.打印流(PrintWriter) 想要通过程序实现内容输出,其核心一定是要依靠OutputStream类,但是OutputStream类有一个最大缺点,就是这个类中的输出操作功能有限,所有的数据一 ...
- Python之三:运算符与表达式
1.运算符: 1.1.运算符种类: 运算符 名称 说明 例子 + 加 5+4 - 减 * 乘 / 除 // 取整除 商的整数部分 3//2,结果 ...
- jQuery---下拉菜单案例
下拉菜单案例 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UT ...
- 二分查找 python实现
欢迎回来 [^first blood]. 要求A是升序数组 递归 只能查 数据存不存在,不能返回下标 def binary_find(A, m): if len(A) == 0: return -1 ...
- Hadoop的安装(2)---Hadoop配置
一:安装JDK hadoop2.x最低jdk版本要求是:jdk1.7(不过推荐用最新的:jdk1.8,因为jdk是兼容旧版本的,而且我们使用的其他软件可能要求的jdk版本较高) 下载地址:https: ...
- 洛谷p1980 计数问题
题目描述 试计算在区间 111 到 nn n的所有整数中,数字x(0≤x≤9) x(0 ≤ x ≤ 9)x(0≤x≤9)共出现了多少次?例如,在 111到11 11 11中,即在 1,2,3,4,5, ...
- python之爬虫(爬取.ts文件并将其合并为.MP4文件——以及一些异常的注意事项)
//20200115 最近在看“咱们裸熊——we bears”第一季和第三季都看完了,单单就第二季死活找不到,只有腾讯有资源,但是要vip……而且还是国语版……所以就瞄上了一个视频网站——可以在线观看 ...
- [Agc005D/At2060] Minimum Sum - 单调栈
鉴于早上那题让我怀疑单调栈白学,特意来复习下单调栈 题意 考虑按照每个元素对答案的贡献来统计,那么我们只需要找到每个元素左边右边第一个比它小的就可 这题给的又是排列,简直不能再良心 #include ...
- md基础语法总结
md即为Markdown,Markdown的目标是实现「易读易写」,可读性,无论如何,都是最重要的.其实md的底层最终还是将我们写的语法转化为html标签了 --------------------- ...
- Git下载GitHub仓库里的某一个文件夹或某一个文件
从Github上下载github上的整个项目,可以用下面指令: git clone https://github.com/XXX/xxxxx.git 其中:XXX是用户在Github上的用户名 xxx ...