結果
| 問題 |
No.3073 Fraction Median
|
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2025-03-21 23:10:35 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 898 bytes |
| コンパイル時間 | 256 ms |
| コンパイル使用メモリ | 82,428 KB |
| 実行使用メモリ | 54,104 KB |
| 最終ジャッジ日時 | 2025-03-21 23:10:42 |
| 合計ジャッジ時間 | 6,682 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 4 TLE * 1 -- * 13 |
ソースコード
from math import gcd
N = int(input())
A = sorted(list(map(int, input().split())))
def comp(X, Y):
x_c, x_d = X
y_c, y_d = Y
return x_c * y_d <= y_c * x_d
def check(val):
max_c, max_d = 0, 1
cnt = 0
for i in range(N):
ok, ng = 0, N
while ng - ok > 1:
mid = (ok + ng) // 2
if comp((A[mid - 1], A[i]), (val, 2 * 10**18)):
ok = mid
else:
ng = mid
cnt += ok
if ok > 0 and comp((max_c, max_d), (A[ok - 1], A[i])):
max_c, max_d = A[ok - 1], A[i]
return (True, (max_c, max_d)) if cnt < N * (N - 1) // 2 else (False, (max_c, max_d))
ok, ng = 0, 2 * 10**18 + 1
while ng - ok > 1:
mid = (ok + ng) // 2
if check(mid)[0]:
ok = mid
else:
ng = mid
ans = check(ng)[1]
print(ans[0] // gcd(*ans), ans[1] // gcd(*ans))