結果
問題 | No.402 最も海から遠い場所 |
ユーザー | tkmst201 |
提出日時 | 2017-05-21 11:00:19 |
言語 | C++11 (gcc 11.4.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,889 bytes |
コンパイル時間 | 1,379 ms |
コンパイル使用メモリ | 166,600 KB |
実行使用メモリ | 205,892 KB |
最終ジャッジ日時 | 2024-09-19 08:04:26 |
合計ジャッジ時間 | 7,573 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | WA | - |
testcase_01 | WA | - |
testcase_02 | WA | - |
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 | TLE | - |
testcase_18 | -- | - |
testcase_19 | -- | - |
testcase_20 | -- | - |
testcase_21 | -- | - |
ソースコード
#include <bits/stdc++.h> using namespace std; #define FOR(i,a,b) for(int i=(a);i<(b);i++) #define REP(i,n) FOR(i,0,n) #define ALL(v) (v).begin(),(v).end() template<typename A, typename B> inline bool chmax(A &a, B b) { if (a<b) { a=b; return 1; } return 0; } template<typename A, typename B> inline bool chmin(A &a, B b) { if (a>b) { a=b; return 1; } return 0; } typedef unsigned long long ull; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; typedef pair<int, pii> P; const ll INF = 1ll<<29; const ll MOD = 1000000007; const double EPS = 1e-10; int h, w; string maps[3000]; int d[3000][3000]; struct Data { int d, y, x, sy, sx; bool operator > (const Data &r) const { if (d != r.d) return d > r.d; if (y != r.y) return y > r.y; if (x != r.x) return x > r.x; if (sy != r.sy) return sy > r.sy; return sx > r.sx; } }; int main() { cin >> h >> w; REP(i, h) cin >> maps[i]; fill(d[0], d[h], INF); priority_queue<Data, vector<Data>, greater<Data> > pq; REP(i, h) { pq.push( (Data){ 1, i, 0, i, -1 } ); pq.push( (Data){ 1, i, w - 1, i, w } ); } REP(j, w) { pq.push( (Data){ 1, 0, j, -1, j } ); pq.push( (Data){ 1, h - 1, j, h, j } ); } REP(i, h) REP(j, w) if (maps[i][j] == '.') pq.push( (Data){ 0, i, j, i, j } ); while (!pq.empty()) { Data now = pq.top(); pq.pop(); if (!chmin(d[now.y][now.x], now.d)) continue; int dx[4] = {1,0,-1,0}, dy[4] = {0,1,0,-1}; REP(i, 4) { int nx = now.x + dx[i]; int ny = now.y + dy[i]; if (!(nx >= 0 && nx < w && ny >= 0 && ny < h)) continue; int nd = max(abs(nx - now.sx), abs(ny - now.sy)); if (d[ny][nx] <= nd) continue; pq.push( (Data){ nd, ny, nx, now.sy, now.sx} ); } } REP(i, h) REP(j, w) printf("%3d%c", d[i][j], j == w - 1 ? '\n' : ' '); int ans = 0; REP(i, h) REP(j, w) chmax(ans, d[i][j]); cout << ans << endl; return 0; }