結果

問題 No.957 植林
ユーザー ei1333333ei1333333
提出日時 2019-11-07 15:01:03
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
WA  
実行時間 -
コード長 1,243 bytes
コンパイル時間 2,040 ms
コンパイル使用メモリ 214,780 KB
実行使用メモリ 6,948 KB
最終ジャッジ日時 2024-07-07 01:38:17
合計ジャッジ時間 5,587 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
6,816 KB
testcase_01 AC 2 ms
6,940 KB
testcase_02 AC 1 ms
6,944 KB
testcase_03 WA -
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 WA -
testcase_16 WA -
testcase_17 WA -
testcase_18 WA -
testcase_19 WA -
testcase_20 WA -
testcase_21 WA -
testcase_22 WA -
testcase_23 WA -
testcase_24 WA -
testcase_25 WA -
testcase_26 WA -
testcase_27 WA -
testcase_28 WA -
testcase_29 WA -
testcase_30 WA -
testcase_31 WA -
testcase_32 WA -
testcase_33 WA -
testcase_34 WA -
testcase_35 WA -
testcase_36 WA -
testcase_37 WA -
testcase_38 WA -
testcase_39 WA -
testcase_40 WA -
testcase_41 AC 18 ms
6,940 KB
testcase_42 AC 18 ms
6,940 KB
testcase_43 AC 40 ms
6,940 KB
testcase_44 AC 40 ms
6,944 KB
testcase_45 AC 1 ms
6,944 KB
testcase_46 AC 1 ms
6,944 KB
testcase_47 AC 2 ms
6,944 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#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;
}
0