結果

問題 No.3527 Minimum Abs Sum
コンテスト
ユーザー Dhruv
提出日時 2026-05-04 22:37:46
言語 C++23
(gcc 15.2.0 + boost 1.89.0)
コンパイル:
g++-15 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
AC  
実行時間 120 ms / 2,000 ms
コード長 1,276 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 3,429 ms
コンパイル使用メモリ 345,352 KB
実行使用メモリ 11,872 KB
最終ジャッジ日時 2026-05-04 22:37:53
合計ジャッジ時間 6,676 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge3_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 30
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

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

#define int long long
const int MOD = 1e9 + 7;

int power(int a, int b){
    int res = 1;
    while(b){
        if(b & 1) res = res * a % MOD;
        a = a * a % MOD;
        b >>= 1;
    }
    return res;
}

int inv(int a){
    return power(a, MOD - 2);
}

signed main() {
    int n;
    cin >> n;

    vector<int> a(n), b(n);
    for(int i = 0; i < n; i++) cin >> a[i];
    for(int i = 0; i < n; i++) cin >> b[i];

    vector<pair<int,int>> c;

    for(int i = 0; i < n; i++){
        if(a[i] != 0){
            int p = b[i], q = a[i];
            if(q < 0){
                p = -p;
                q = -q;
            }
            c.push_back({p, q});
        }
    }

    sort(c.begin(), c.end(), [](pair<int,int> x, pair<int,int> y){
        return (__int128)x.first * y.second < (__int128)y.first * x.second;
    });

    int total = 0;
    for(auto &x : c){
        total += abs(x.second);
    }

    int cur = 0;
    int p = 0, q = 1;

    for(auto &x : c){
        cur += abs(x.second);
        if(cur * 2 >= total){
            p = x.first;
            q = x.second;
            break;
        }
    }

    p = (p % MOD + MOD) % MOD;
    q = (q % MOD + MOD) % MOD;

    int ans = p * inv(q) % MOD;

    cout << ans;
}
0