結果

問題 No.3527 Minimum Abs Sum
コンテスト
ユーザー AP25
提出日時 2026-05-04 23:29:09
言語 PyPy3
(7.3.17)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
WA  
実行時間 -
コード長 983 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 292 ms
コンパイル使用メモリ 85,572 KB
実行使用メモリ 152,144 KB
最終ジャッジ日時 2026-05-04 23:29:29
合計ジャッジ時間 14,132 ms
ジャッジサーバーID
(参考情報)
judge3_1 / judge1_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 7 WA * 23
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

mod = 10 ** 9 + 7

from functools import cmp_to_key
# 比較関数が正を返した場合」に要素の順序を入れ替え、「負を返した場合」は順序をそのままに保つ

# 比較関数:a=(Ai,Bi), b=(Aj,Bj) を Ai/Bi と Aj/Bj の大小で比較
def compare_frac(a, b):
    Ai, Bi = a
    Aj, Bj = b
    
    # Ai/Bi < Aj/Bj  ⇔  Ai*Bj < Aj*Bi :
    # 分数部分は降順にソートしたいので Ai/Bi < Aj<Bjのとき正を返す(入れ替え)
    if Ai * Bj < Aj * Bi:
        return -1
    elif Ai * Bj > Aj * Bi:
        return 1
    else:
        return 0


N = int(input())
A = list(map(int, input().split()))
B = list(map(int, input().split()))

C = []
asum = 0
for i in range(N):
    if A[i] != 0:
        C.append((B[i],A[i]))
    asum += abs(A[i])

C.sort(key= cmp_to_key(compare_frac))

t = 0
for b, a in C:
    t += abs(a)
    if t*2 > asum:
        break

ans = b * pow(a,-1,mod) % mod
print(ans)
0