제출 #46241

#제출 시각아이디문제언어결과실행 시간메모리
46241qoo2p5Maxcomp (info1cup18_maxcomp)C++17
15 / 100
2 ms516 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int INF = (int) 1e9 + 1e6 + 123; const ll LINF = (ll) 1e18 + 1e9 + 123; #define rep(i, s, t) for (auto i = (s); i < (t); ++(i)) #define per(i, s, t) for (auto i = (s); i >= (t); --(i)) #define sz(x) ((int)(x).size()) #define mp make_pair #define pb push_back bool mini(auto &x, const auto &y) { if (y < x) { x = y; return 1; } return 0; } bool maxi(auto &x, const auto &y) { if (y > x) { x = y; return 1; } return 0; } void run(); int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); run(); return 0; } const int N = (int) 1000 + 1; int n, m; int a[N][N], dp[N][N]; bool vis[N][N]; const int dx[4] = {-1, 1, 0, 0}; const int dy[4] = {0, 0, -1, 1}; bool check(int i, int j) { return 0 <= min(i, j) && i < n && j < m; } void run() { cin >> n >> m; rep(i, 0, n) { rep(j, 0, m) { cin >> a[i][j]; } } priority_queue<pair<int, pair<int, int>>> q; rep(i, 0, n) { rep(j, 0, m) { dp[i][j] = a[i][j] + 1; q.push({-dp[i][j], {i, j}}); } } while (sz(q)) { auto it = q.top(); int i = it.second.first; int j = it.second.second; q.pop(); if (vis[i][j]) continue; vis[i][j] = 1; rep(dir, 0, 4) { int ni = i + dx[dir]; int nj = j + dy[dir]; if (check(ni, nj) && mini(dp[ni][nj], dp[i][j] + 1)) { q.push({-dp[ni][nj], {ni, nj}}); } } } int ans = 0; rep(i, 0, n) rep(j, 0, m) maxi(ans, a[i][j] - dp[i][j]); cout << ans << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...