結果
| 問題 |
No.957 植林
|
| コンテスト | |
| ユーザー |
ei1333333
|
| 提出日時 | 2019-11-07 15:01:03 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,243 bytes |
| コンパイル時間 | 2,236 ms |
| コンパイル使用メモリ | 206,984 KB |
| 最終ジャッジ日時 | 2025-01-08 02:22:38 |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 7 WA * 38 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using int64 = long long;
int main() {
int H, W;
cin >> H >> W;
vector< vector< int64 > > G(H, vector< int64 >(W));
for(int i = 0; i < H; i++) {
for(int j = 0; j < W; j++) cin >> G[i][j];
}
vector< int64 > R(H), C(W);
for(int i = 0; i < H; i++) cin >> R[i];
for(int i = 0; i < W; i++) cin >> C[i];
vector< pair< int, int > > ord;
for(int i = 0; i < H; i++) {
for(int j = 0; j < W; j++) {
ord.emplace_back(i, j);
}
}
sort(begin(ord), end(ord), [&](auto p, auto q) {
return G[p.first][p.second] < G[q.first][q.second];
});
vector< int64 > row_sum(H);
for(int i = 0; i < H; i++) {
for(int j = 0; j < W; j++) row_sum[i] += G[i][j];
}
int64 get = accumulate(begin(R), end(R), 0LL) + accumulate(begin(C), end(C), 0LL);
int64 sum_cut = 0;
vector< int64 > row_cap(H), col_cap(C);
for(int i = 0; i < H; i++) {
int64 cut = min(R[i], row_sum[i]);
row_cap[i] = row_sum[i] - cut;
sum_cut += cut;
}
for(auto &p : ord) {
int64 cut = min({G[p.first][p.second], row_cap[p.first], col_cap[p.second]});
row_cap[p.first] -= cut;
col_cap[p.second] -= cut;
sum_cut += cut;
}
cout << get - sum_cut << endl;
}
ei1333333