Codeforces Round #730 (Div. 2) A. Exciting Bets(同余)
Posted issue是fw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #730 (Div. 2) A. Exciting Bets(同余)相关的知识,希望对你有一定的参考价值。
先假设有最大值为 k k k,为了达到最大值每个数都加了 x x x,且 a > b a>b a>b
满足 s 1 k = a + x & & s 2 k = b + x s_1k=a+x\\&\\&s_2k=b+x s1k=a+x&&s2k=b+x
从式子中可以看出只要 a , b a,b a,b模 k k k同余就存在合法的 x x x满足要求
于是我们找到最大的 k k k使得 a % k = b % k a\\%k=b\\%k a%k=b%k即可
那么只需要枚举 z = a − b z=a-b z=a−b的因子作为 k k k即可
直接枚举复杂度是 O ( a b s ( a − b ) ) O(\\sqrt{abs(a-b))} O(abs(a−b))的
然而我们发现 a % ( a − b ) = b % ( a − b ) a\\%(a-b)=b\\%(a-b) a%(a−b)=b%(a−b),因为 a , b a,b a,b本身也只相差 a − b a-b a−b而已啊…
于是取 k = a − b k=a-b k=a−b就是最大值,判断一下是一直做减法划算还是一直做加法划算即可
特判 a = = b a==b a==b
#include <bits/stdc++.h>
using namespace std;
#define int long long
int t,n,m;
signed main()
{
cin >> t;
while( t-- )
{
cin >> n >> m;
if( n<m ) swap( n,m );
if( n==m ) cout << "0 0\\n";
else
{
int k = n-m;
int yu = n%k;
int mi = min( n%k,k-n%k );
cout << k << " " << mi << endl;
}
}
}
以上是关于Codeforces Round #730 (Div. 2) A. Exciting Bets(同余)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #730 div.2 A-E题解
Codeforces Round #730 (Div. 2) A. Exciting Bets(同余)
Codeforces Round #730 (Div. 2) C. Need for Pink Slips(概率,模拟....)
Codeforces Round #730 (Div. 2) D. RPD and Rap Sheet (交互,从easy到hard)