結果
| 問題 |
No.1028 闇討ち
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-04-17 22:51:40 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 101 ms / 2,000 ms |
| コード長 | 1,097 bytes |
| コンパイル時間 | 1,594 ms |
| コンパイル使用メモリ | 173,524 KB |
| 実行使用メモリ | 15,104 KB |
| 最終ジャッジ日時 | 2024-10-03 14:38:32 |
| 合計ジャッジ時間 | 3,698 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 20 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i, n) for (int i = 0; i < (n); i++)
#define repr(i, n) for (int i = (n) - 1; i >= 0; i--)
#define range(a) a.begin(), a.end()
int main() {
cin.tie(nullptr);
ios::sync_with_stdio(false);
int N; cin >> N;
vector<vector<int>> A(N, vector<int>(N));
rep(i, N) rep(j, N) cin >> A[i][j], A[i][j]--;
vector<vector<int>> S0(N, vector<int>(N + 1));
vector<vector<int>> S1(N, vector<int>(N + 1));
auto add = [&](vector<int> &a0, vector<int> &a1, int l, int r, int x0, int x1) {
a0[l] += x0;
a0[r] -= x0;
a1[l] += x1;
a1[r] -= x1;
};
rep(i, N) rep(j, N) {
int l = max(0, i - j);
int r = min(N, i + j);
add(S0[A[i][j]], S1[A[i][j]], 0, l, i, -1);
add(S0[A[i][j]], S1[A[i][j]], l, r, j, 0);
add(S0[A[i][j]], S1[A[i][j]], r, N, -i, 1);
}
rep(i, N) rep(j, N) {
S0[i][j + 1] += S0[i][j];
S1[i][j + 1] += S1[i][j];
}
int ans = 0;
rep(i, N) {
int mn = INT_MAX;
rep(j, N) mn = min(mn, S0[i][j] + S1[i][j] * j);
ans += mn;
}
cout << ans << endl;
}