链接:https://ac.nowcoder.com/acm/contest/1109/I
来源:2019牛客国庆集训派对day4
- 题目描述
- 输入描述:
The input contains zero or more test cases and is terminated by end-of-file.
Each test case contains two integers n, m.
1 ≤ n , m ≤ 1 0 9 1≤n,m≤10^{9} 1≤n,m≤109
The number of tests cases does not exceed 1 0 4 10^{4} 104.- 输出描述:
For each case, output a fraction p/q which denotes the result.- 输入
1 1
1 2- 输出
1/2
1/4- 备注:
For the first sample, α = 0 α=0 α=0 maximizes the function.
题意
:
:
:最大化
f
(
t
)
=
m
i
n
i
,
j
∈
Z
∣
i
/
n
−
j
/
m
+
t
∣
f(t)=min_{i,j∈Z}|i/n-j/m+t|
f(t)=mini,j∈Z∣i/n−j/m+t∣
思路
:
:
:
f
(
t
)
=
m
i
n
i
,
j
∈
Z
∣
i
/
n
−
j
/
m
+
t
∣
=
m
i
n
i
,
j
∈
Z
∣
(
i
∗
m
−
j
∗
n
)
/
(
m
∗
n
)
+
t
∣
f(t)=min_{i,j∈Z}|i/n-j/m+t|=min_{i,j∈Z}|(i*m-j*n)/(m*n)+t|
f(t)=mini,j∈Z∣i/n−j/m+t∣=mini,j∈Z∣(i∗m−j∗n)/(m∗n)+t∣,我们设
(
i
∗
m
−
j
∗
n
)
=
c
(i*m-j*n) = c
(i∗m−j∗n)=c 根据题意可知此方程式一定有解,那么就是
e
c
g
c
d
ecgcd
ecgcd 有解,所以
(
i
∗
m
−
j
∗
n
)
=
c
=
k
∗
g
c
d
(
m
∗
n
)
(i*m-j*n) = c=k*gcd(m*n)
(i∗m−j∗n)=c=k∗gcd(m∗n),得到
f
(
t
)
=
m
i
n
i
,
j
∈
Z
∣
k
∗
g
c
d
(
m
,
n
)
/
(
m
∗
n
)
+
t
∣
f(t)=min_{i,j∈Z}|k*gcd(m,n)/(m*n)+t|
f(t)=mini,j∈Z∣k∗gcd(m,n)/(m∗n)+t∣,我们找出两个点
X
k
=
k
∗
g
c
d
(
m
,
n
)
/
(
m
∗
n
)
X_{k}=k*gcd(m,n)/(m*n)
Xk=k∗gcd(m,n)/(m∗n)
X
k
+
1
=
(
k
+
1
)
∗
g
c
d
(
m
,
n
)
/
(
m
∗
n
)
X_{k+1}=(k+1)*gcd(m,n)/(m*n)
Xk+1=(k+1)∗gcd(m,n)/(m∗n),这两个点之间的距离为
X
k
+
1
−
X
k
=
g
c
d
(
m
,
n
)
/
(
m
∗
n
)
X_{k+1}-X_{k}=gcd(m,n)/(m*n)
Xk+1−Xk=gcd(m,n)/(m∗n),我们需要找到的答案就是
t
t
t 到这些点的距离哪一个最近并且是最大的。由上述分析可知
t
t
t 到上面两个点的中点才可以最大化
f
(
t
)
f(t)
f(t)。即
t
=
g
c
d
(
m
,
n
)
/
(
m
∗
n
)
/
2
=
1
/
2
∗
l
c
m
(
m
,
n
)
t=gcd(m,n)/(m*n)/2=1/2*lcm(m,n)
t=gcd(m,n)/(m∗n)/2=1/2∗lcm(m,n)。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int Max_n=1e6+10;
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
ll lcm(int a,int b){
return 1ll*a*b/gcd(a,b);
}
int main(){
int n,m;
while(~scanf("%d%d",&n,&m)){
printf("%d/%lld\n",1,2*lcm(n,m));
}
return 0;
}
/**
* Copyright(c)
* All rights reserved.
* Author : Max_n
* Date : 2019-10-05-16.42.31
* Description : exgcd 的应用
*/