A. Exciting Bets

该博客讨论了一个关于赛车比赛的数学问题,其中玩家可以通过两种操作改变他们下注的金额来提高粉丝的兴奋度,这由两个数的最大公约数(GCD)决定。博主提出,当两个数相等时,GCD可以无限大,从而实现最大兴奋度。他们给出了一个解决方案,通过增加或减少下注金额使得两个数相等,从而达到最大兴奋度,并计算了达到这一状态所需的最小操作次数。博主在解题过程中遇到了证明最小步骤正确性的挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:https://codeforces.com/contest/1543/problem/A
Welcome to Rockport City!

It is time for your first ever race in the game against Ronnie. To make the race interesting, you have bet a dollars and Ronnie has bet b dollars. But the fans seem to be disappointed. The excitement of the fans is given by gcd(a,b), where gcd(x,y) denotes the greatest common divisor (GCD) of integers x and y. To make the race more exciting, you can perform two types of operations:

Increase both a and b by 1.
Decrease both a and b by 1. This operation can only be performed if both a and b are greater than 0.
In one move, you can perform any one of these operations. You can perform arbitrary (possibly zero) number of moves. Determine the maximum excitement the fans can get and the minimum number of moves required to achieve it.

Note that gcd(x,0)=x for any x≥0.

Input
The first line of input contains a single integer t (1≤t≤5⋅103) — the number of test cases.

The first and the only line of each test case contains two integers a and b (0≤a,b≤1018).

Output
For each test case, print a single line containing two integers.

If the fans can get infinite excitement, print 0 0.

Otherwise, the first integer must be the maximum excitement the fans can get, and the second integer must be the minimum number of moves required to achieve that excitement.

Example
inputCopy
4
8 5
1 2
4 4
3 9
outputCopy
3 1
1 0
0 0
6 3
Note
For the first test case, you can apply the first operation 1 time to get a=9 and b=6. It can be shown that 3 is the maximum excitement possible.

For the second test case, no matter how many operations you apply, the fans will always have an excitement equal to 1. Since the initial excitement is also 1, you don’t need to apply any operation.

For the third case, the fans can get infinite excitement by applying the first operation an infinite amount of times.

For the fourth test case, you can apply the second operation 3 times to get a=0 and b=6. Since, gcd(0,6)=6, the fans will get an excitement of 6.

解题思路:
仔细观察,发现当a=b时那么他们的gcd可以无限大,题目中给出gcd(0,x)=x,那么我们就可以推出abs(a-b)就是最大的,而且步数要最少,那么再仔细思考下会发现把b增加或减少凑成abs(a-b)的倍数,取其中最小的就是答案(b%abs(a-b),abs(a-b)-b%abs(a-b)),增加a也是一样的结果,因为a = abs(a-b) + b

解题遇到的问题:
证明最小步骤的结论,没想清楚

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

ll gcd(ll a,ll b){
    while(b>0){ll temp = a%b;a = b;b = temp;}
    return a;
}

int main(){

    ios_base::sync_with_stdio(0);

    int t;
    cin >> t;

    while(t--){
        ll a,b;
        cin >> a >> b;
        if(a == b){
            cout << 0 << ' ' << 0 << endl;
        }else{
            ll ans1 = abs(a-b);
            ll ans2 = min(b%ans1,ans1-b%ans1);
            cout << ans1 << ' ' << ans2 << endl;
        }

    }
    

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值