結果
| 問題 |
No.511 落ちゲー 〜手作業のぬくもり〜
|
| コンテスト | |
| ユーザー |
SSRS
|
| 提出日時 | 2021-12-18 18:01:06 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 125 ms / 4,000 ms |
| コード長 | 1,331 bytes |
| コンパイル時間 | 1,586 ms |
| コンパイル使用メモリ | 176,896 KB |
| 実行使用メモリ | 12,800 KB |
| 最終ジャッジ日時 | 2024-11-24 12:43:53 |
| 合計ジャッジ時間 | 3,554 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 32 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
struct binary_indexed_tree{
int N;
vector<long long> BIT;
binary_indexed_tree(int N): N(N), BIT(N + 1, 0){
}
void add(int i, long long x){
i++;
while (i <= N){
BIT[i] += x;
i += i & -i;
}
}
long long sum(int i){
long long ans = 0;
while (i > 0){
ans += BIT[i];
i -= i & -i;
}
return ans;
}
};
int main(){
int n, w;
long long h;
cin >> n >> w >> h;
vector<int> a(n), b(n), x(n);
for (int i = 0; i < n; i++){
cin >> a[i] >> b[i] >> x[i];
x[i]--;
}
vector<vector<pair<int, long long>>> add(w + 1);
for (int i = 0; i < n; i++){
add[x[i]].push_back(make_pair(i, b[i]));
add[x[i] + a[i]].push_back(make_pair(i, -b[i]));
}
long long A = 0, B = 0;
binary_indexed_tree BIT(n);
for (int i = 0; i < w; i++){
for (auto P : add[i]){
BIT.add(P.first, P.second);
}
int tv = n + 1, fv = 0;
while (tv - fv > 1){
int mid = (tv + fv) / 2;
if (BIT.sum(mid) >= h){
tv = mid;
} else {
fv = mid;
}
}
if (tv != n + 1){
if (tv % 2 == 1){
A++;
} else {
B++;
}
}
}
if (A > B){
cout << 'A' << endl;
} else if (A < B){
cout << 'B' << endl;
} else {
cout << "DRAW" << endl;
}
}
SSRS