打卡信奥刷题(2026)用C++实现信奥 P11062 【MX-X4-T2】「Jason-1」加法

P11062 【MX-X4-T2】「Jason-1」加法

题目背景

原题链接:https://oier.team/problems/X4C

题目描述

给定两个整数 a , b a, b a,b(可能为负),你可以进行任意多次操作(也可以不操作),每次操作你需要在如下两种形式中进行选择:

  • 操作 1:将 a a a 赋值为 a a a b b b 的和,即 a ← a + b a \gets a + b aa+b
  • 操作 2:将 b b b 赋值为 a a a b b b 的和,即 b ← a + b b \gets a + b ba+b

你的目标是最小化 a a a b b b 的差的绝对值 ∣ a − b ∣ \lvert a-b \rvert ab,请输出最小值。

输入格式

本题输入包含多组数据。

第一行,一个正整数 T T T,表示数据组数。对于每组数据:

  • 仅一行,两个整数 a , b a, b a,b

输出格式

对于每组数据:

  • 仅一行一个整数,表示答案。

输入输出样例 #1

输入 #1

5
1 1
3 7
-4 1
-5 -8
4 0

输出 #1

0
3
0
3
0

输入输出样例 #2

输入 #2

2
-6 9
34 -51

输出 #2

0
0

说明/提示

【样例解释 #1】

对于第 1 组数据,一种可行的操作方案是:不进行任何操作, ∣ a − b ∣ = 0 \lvert a-b \rvert=0 ab=0

对于第 2 组数据,一种可行的操作方案是:先使用操作 2, b b b 被赋值为 10 10 10;再使用操作 1, a a a 被赋值为 13 13 13,此时 ∣ a − b ∣ = 3 \lvert a-b \rvert=3 ab=3,可以证明这是能够达到的最小值。

对于第 3 组数据,一种可行的操作方案是:连续使用 5 5 5 次操作 1, a a a 依次被赋值为 − 3 , − 2 , − 1 , 0 , 1 -3,-2,-1,0,1 3,2,1,0,1,此时 a a a b b b 相等, ∣ a − b ∣ = 0 \lvert a-b \rvert=0 ab=0

对于第 4 组数据,一种可行的操作方案是:不进行任何操作,此时 ∣ a − b ∣ = 3 \lvert a-b \rvert=3 ab=3

对于第 5 组数据,一种可行的操作方案是:使用操作 2, b b b 被赋值为 4 4 4,此时 ∣ a − b ∣ = 0 \lvert a-b \rvert=0 ab=0

【样例解释 #2】

对该样例中的两组数据,均可先使用 1 1 1 次操作 2,再使用 3 3 3 次操作 1,使得差的绝对值为 0 0 0

【数据范围】

测试点编号特殊性质分值
1A 27 27 27
2B 31 31 31
3 42 42 42
  • 特殊性质 A:保证 ∣ a ∣ , ∣ b ∣ ≤ 10 \lvert a \rvert, \lvert b \rvert \le 10 a,b10
  • 特殊性质 B:保证 a , b ≥ 1 a,b \ge 1 a,b1

对于 100 % 100\% 100% 的数据, 1 ≤ T ≤ 1 0 5 1 \le T \le 10^5 1T105 ∣ a ∣ , ∣ b ∣ ≤ 1 0 9 \lvert a \rvert, \lvert b \rvert \le 10^9 a,b109

C++实现

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;

void solve() {
  ll a, b;
  cin >> a >> b;
  if (a < b) swap(a, b);
  if (a * b >= 0) 
  	cout << min({abs(a), abs(b), abs(a - b)}) << endl;
  else {
    cout << 0 << endl;
  }
} 


main() {
	int t; cin >> t; while (t--) solve();
	return 0;
}


在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值