結果

問題 No.3509 Get More Money
コンテスト
ユーザー GOTKAKO
提出日時 2026-04-18 04:25:32
言語 C++17
(gcc 15.2.0 + boost 1.89.0)
コンパイル:
g++-15 -O2 -lm -std=c++17 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
AC  
実行時間 259 ms / 2,000 ms
コード長 1,204 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,833 ms
コンパイル使用メモリ 221,860 KB
実行使用メモリ 21,632 KB
最終ジャッジ日時 2026-04-18 04:25:56
合計ジャッジ時間 22,870 ms
ジャッジサーバーID
(参考情報)
judge1_1 / judge2_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 60
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

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

random_device rnd;
mt19937 mt(rnd());

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int T; cin >> T;
    while(T--){
        long long N,K; cin >> N >> K;
        vector<long long> A(N),B(N),C(N),D(N);
        for(auto &a : A) cin >> a;
        for(auto &a : B) cin >> a;
        for(auto &a : C) cin >> a;
        for(auto &a : D) cin >> a;
        
        map<long long,long long> M;
        long long hold = 0,answer = 0;
        for(int i=0; i<N; i++){
            long long a = A.at(i),b = B.at(i),c = C.at(i),d = D.at(i);
            hold += b,M[a] += b;
            while(d && M.size() && M.begin()->first < c){
                auto &[v,w] = *M.begin();
                long long buy = min(d,w);
                answer += (c-v)*buy;
                M[c] += buy,w -= buy,d -= buy;
                if(w == 0) M.erase(M.begin());
            }
            while(hold > K){
                auto &[v,w] = *M.rbegin();
                long long dec = min(w,hold-K);
                hold -= dec,w -= dec;
                if(w == 0) M.erase(--M.end());
            }
        }
        cout << answer << "\n";
    }
    
}    
0