結果
問題 | No.2623 Room Allocation |
ユーザー | ayataka5 |
提出日時 | 2024-02-09 23:10:43 |
言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 99 ms / 2,000 ms |
コード長 | 1,393 bytes |
コンパイル時間 | 2,479 ms |
コンパイル使用メモリ | 209,560 KB |
実行使用メモリ | 9,088 KB |
最終ジャッジ日時 | 2024-09-28 16:22:25 |
合計ジャッジ時間 | 4,738 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 30 |
ソースコード
#include <bits/stdc++.h> using namespace std; int main() { int N, X, Y; cin >> N >> X >> Y; vector P(N, 0); vector c(N, 'A'); for(int i = 0; i < N; i++) cin >> P[i] >> c[i]; vector A(min(N, X+Y), 0LL), B(min(N, X+Y), 0LL); for(int i = 0; i < N; i++) { if(c[i] == 'A') A[i % (X+Y)] += (long long)P[i]; else B[i % (X+Y)] += (long long)P[i]; } long long res(0LL); int x(0), y(0); vector d(size(A), 'A'); for(int i = 0; i < size(A); i++) { if(A[i] < B[i]) { y++; d[i] = 'B'; } if(B[i] < A[i]) { x++; d[i] = 'A'; } if(A[i] == B[i]) { if(x < y) { x++; d[i] = 'A'; } else { y++; d[i] = 'B'; } } res += max(A[i], B[i]); } vector C(min(N, X+Y), 0LL); for(int i = 0; i < size(A); i++) C[i] = abs(A[i]-B[i]); if(X < x) { priority_queue<long long> pq; for(int i = 0; i < size(A); i++) { if(d[i] == 'A') pq.push(-C[i]); } for(int i = 0; i < x-X; i++) { res += pq.top(); pq.pop(); } } if(Y < y) { priority_queue<long long> pq; for(int i = 0; i < size(A); i++) { if(d[i] == 'B') pq.push(-C[i]); } for(int i = 0; i < y-Y; i++) { res += pq.top(); pq.pop(); } } cout << res << endl; return 0; }