結果
問題 | No.3049 Contest Coordinator |
ユーザー |
![]() |
提出日時 | 2025-03-07 21:18:14 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 404 ms / 2,000 ms |
コード長 | 990 bytes |
コンパイル時間 | 4,231 ms |
コンパイル使用メモリ | 293,264 KB |
実行使用メモリ | 37,708 KB |
最終ジャッジ日時 | 2025-03-07 21:18:30 |
合計ジャッジ時間 | 14,961 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 58 |
ソースコード
#include <bits/stdc++.h> using namespace std; #define rep(i, l, r) for (int i = (int)(l); i<(int)(r); i++) #define ll long long ll INF = 4e18; int main() { int N, T; ll X, Y; cin >> N >> T >> X >> Y; vector<int> A(N+1); rep(i, 0, N) cin >> A[i]; A[N] = 2e9; sort(A.begin(), A.end()); vector<vector<int>> R; vector<int> now = {A[0]}; rep(i, 1, N+1) { if (A[i]-now.back() > T) { R.push_back(now); now = {A[i]}; } else { now.push_back(A[i]); } } vector<int> L; for (auto r : R) L.push_back((int)r.size()); sort(L.rbegin(), L.rend()); vector<int> S((int)L.size()+1); S[0] = 0; rep(i, 1, L.size()+1) { S[i] = S[i-1] + L[i-1]; } //S[i] >= k となる最小のiを求める vector<int> ans(N+1); rep(i, 1, N+1) { int x = lower_bound(S.begin(), S.end(), i) - S.begin(); cout << (x-1)*min(X, Y) << " "; } cout << endl; }