結果

問題 No.3049 Contest Coordinator
ユーザー rin204
提出日時 2025-02-03 22:10:22
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 283 ms / 2,000 ms
コード長 1,249 bytes
コンパイル時間 10,341 ms
コンパイル使用メモリ 358,484 KB
実行使用メモリ 38,288 KB
最終ジャッジ日時 2025-02-03 22:45:21
合計ジャッジ時間 20,110 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 58
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>

#include "testlib.h"

void solve() {
    int n = inf.readInt(1, 500000);
    inf.readSpace();
    int t = inf.readInt(0, 1'000'000'000);
    inf.readSpace();
    int x = inf.readInt(1, 1'000'000'000);
    inf.readSpace();
    int y = inf.readInt(1, 1'000'000'000);
    inf.readEoln();
    std::vector<int> D = inf.readInts(n, 1, 1'000'000'000);
    inf.readEoln();

    std::sort(D.begin(), D.end());
    std::vector<int> C(0);
    int row = 0;
    for (int i = 1; i < n; i++) {
        if (D[i] - D[i - 1] > t) {
            C.push_back(row + 1);
            row = 0;
        } else {
            row++;
        }
    }
    C.push_back(row + 1);
    std::sort(C.begin(), C.end(), std::greater<int>());

    std::vector<int> ans(n, -1);
    if (x > y) x = y;

    int tot = 0;
    for (size_t i = 0; i < C.size(); i++) {
        tot += C[i];
        ans[tot - 1] = i;
    }
    for (int i = n - 2; i >= 0; i--) {
        if (ans[i] == -1) ans[i] = ans[i + 1];
    }
    for (size_t i = 0; i < n; i++) {
        std::cout << (long long)ans[i] * x << " \n"[i + 1 == n];
    }
}

int main(int argc, char *argv[]) {
    std::cin.tie(0)->sync_with_stdio(0);
    registerValidation(argc, argv);
    solve();
    inf.readEof();
}
0