結果
問題 | No.402 最も海から遠い場所 |
ユーザー |
![]() |
提出日時 | 2016-07-23 00:04:26 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 404 ms / 3,000 ms |
コード長 | 1,103 bytes |
コンパイル時間 | 236 ms |
コンパイル使用メモリ | 24,448 KB |
実行使用メモリ | 71,988 KB |
最終ジャッジ日時 | 2024-11-06 13:42:18 |
合計ジャッジ時間 | 2,898 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 19 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:9:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 9 | scanf("%d%d", &h, &w); | ~~~~~^~~~~~~~~~~~~~~~ main.cpp:12:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 12 | scanf("%s", s + 1); | ~~~~~^~~~~~~~~~~~~
ソースコード
#include <stdio.h> int h, w; int f[3002][3002]; int queue[9000000], get, set; int main() { scanf("%d%d", &h, &w); for(int i = 1; i <= h; i++) { char s[3002]; scanf("%s", s + 1); for(int j = 1; j <= w; j++) { f[i][j] = (s[j] == '.' ? 0 : -1); } } for(int i = 0; i <= h + 1; i++) { for(int j = 0; j <= w + 1; j++) { if(f[i][j] == 0) { for(int k = -1; k <= 1; k++) { for(int l = -1; l <= 1; l++) { if(k == 0 && l == 0) { continue; } if( ! (1 <= i + k && i + k <= h && 1 <= j + l && j + l <= w) ) { continue; } if(f[i + k][j + l] == -1) { f[i + k][j + l] = 1; queue[set++] = (i + k) * 4000 + (j + l); } } } } } } int max = 1; while(get != set) { int q = queue[get++]; int i = q / 4000; int j = q % 4000; for(int k = -1; k <= 1; k++) { for(int l = -1; l <= 1; l++) { if(k == 0 && l == 0) { continue; } if(f[i + k][j + l] == -1) { f[i + k][j + l] = f[i][j] + 1; if(max < f[i][j] + 1) { max = f[i][j] + 1; } queue[set++] = (i + k) * 4000 + (j + l); } } } } printf("%d\n", max); return 0; }