結果
問題 | No.86 TVザッピング(2) |
ユーザー | nanasili |
提出日時 | 2014-12-05 01:11:19 |
言語 | C++11 (gcc 11.4.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 4,715 bytes |
コンパイル時間 | 704 ms |
コンパイル使用メモリ | 86,716 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-06-11 15:40:28 |
合計ジャッジ時間 | 1,590 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
6,812 KB |
testcase_01 | AC | 2 ms
6,940 KB |
testcase_02 | AC | 2 ms
6,940 KB |
testcase_03 | AC | 1 ms
6,944 KB |
testcase_04 | AC | 2 ms
6,940 KB |
testcase_05 | AC | 1 ms
6,944 KB |
testcase_06 | AC | 2 ms
6,940 KB |
testcase_07 | AC | 1 ms
6,944 KB |
testcase_08 | AC | 2 ms
6,948 KB |
testcase_09 | AC | 2 ms
6,944 KB |
testcase_10 | AC | 2 ms
6,940 KB |
testcase_11 | AC | 2 ms
6,940 KB |
testcase_12 | AC | 1 ms
6,940 KB |
testcase_13 | AC | 1 ms
6,940 KB |
testcase_14 | AC | 2 ms
6,944 KB |
testcase_15 | AC | 2 ms
6,940 KB |
testcase_16 | AC | 2 ms
6,940 KB |
testcase_17 | AC | 1 ms
6,944 KB |
testcase_18 | AC | 1 ms
6,944 KB |
testcase_19 | AC | 1 ms
6,944 KB |
testcase_20 | AC | 1 ms
6,944 KB |
testcase_21 | AC | 2 ms
6,944 KB |
testcase_22 | AC | 1 ms
6,948 KB |
testcase_23 | AC | 2 ms
6,944 KB |
testcase_24 | AC | 2 ms
6,940 KB |
testcase_25 | AC | 2 ms
6,940 KB |
testcase_26 | WA | - |
testcase_27 | AC | 2 ms
6,944 KB |
testcase_28 | AC | 1 ms
6,940 KB |
testcase_29 | AC | 2 ms
6,940 KB |
testcase_30 | AC | 1 ms
6,944 KB |
testcase_31 | AC | 2 ms
6,944 KB |
testcase_32 | AC | 2 ms
6,944 KB |
ソースコード
#include <algorithm> #include <climits> #include <cstdlib> #include <vector> #include <cctype> #include <deque> #include <cmath> #include <queue> #include <map> #include <set> #include <ctime> #include <stack> #include <cstdio> #include <string> #include <iomanip> #include <cstring> #include <iostream> #include <functional> using namespace std; typedef long long ll; #define LLMAX LLONG_MAX #define IMAX INT_MAX int main() { int n, m; cin >> n >> m; int safeN = 0; char field[m][n]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> field[j][i]; safeN += (field[j][i] == '.'); } } if (safeN == 2 && n*m == 2) { cout << "YES" << endl; return 0; } if (n == 1 || m == 1) { cout << "NO" << endl; return 0; } bool vis[m][n]; memset(vis, false, sizeof(vis)); bool ok = false; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (field[j][i] == '.') { int dx[] = {1,0,-1,0}; int dy[] = {0,-1,0,1}; for (int p = 0; p < 4; p++) { int nx = j+dx[p]; int ny = i+dy[p]; int cnt = 1; if (!(nx >= 0 && ny >= 0 && nx < m && ny < n && field[nx][ny] == '.')) continue; memset(vis, false, sizeof(vis)); nx = j; ny = i; vis[j][i] = true; for (int k = 0; k < 4; k++) { nx += dx[(k+p)%4]; ny += dy[(k+p)%4]; while (nx >= 0 && ny >= 0 && nx < m && ny < n && field[nx][ny] == '.' && !vis[nx][ny]) { cnt++; vis[nx][ny] = true; // std::cout << nx << " " << ny << std::endl; nx += dx[(k+p)%4]; ny += dy[(k+p)%4]; if (!(nx >= 0 && ny >= 0 && nx < m && ny < n && field[nx][ny] == '.' && !vis[nx][ny])) { nx -= dx[(k+p)%4]; ny -= dy[(k+p)%4]; if (cnt == safeN) { for (int e = 0; e < 4; e++) { nx += dx[e]; ny += dy[e]; if (nx == i && ny == j) { cout << "YES" << endl; return 0; } nx -= dx[e]; ny -= dy[e]; } } break; } } } // cout << endl; } ok = true; } if (ok) break; } if (ok) break; } ok = false; int cnt2 = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (field[j][i] == '.') { int dx[] = {1,0,-1,0}; int dy[] = {0,-1,0,1}; for (int p = 0; p < 4; p++) { int nx1 = j+dx[p]; int ny1 = i+dy[p]; int nx2 = j+dx[(p+1)%4]; int ny2 = i+dy[(p+1)%4]; int nx3 = j+dx[p]+dx[(p+1)%4]; int ny3 = i+dy[p]+dy[(p+1)%4]; if (!(nx1 >= 0 && ny1 >= 0 && nx1 < m && ny1 < n && field[nx1][ny1] == '.')) continue; if (!(nx2 >= 0 && ny2 >= 0 && nx2 < m && ny2 < n && field[nx2][ny2] == '.')) continue; if (!(nx3 >= 0 && ny3 >= 0 && nx3 < m && ny3 < n && field[nx3][ny3] == '#')) continue; memset(vis, false, sizeof(vis)); cnt2++; int cnt = 1; vis[j][i] = true; int nx = j, ny = i; p++; for (int k = 0; k < 6; k++) { nx += dx[(k+p)%4]; ny += dy[(k+p)%4]; while (nx >= 0 && ny >= 0 && nx < m && ny < n && field[nx][ny] == '.' && !vis[nx][ny]) { cnt++; vis[nx][ny] = true; // if (j == 43 && i == 18) { // std::cout << nx << " " << ny << std::endl; // } nx += dx[(k+p)%4]; ny += dy[(k+p)%4]; if (!(nx >= 0 && ny >= 0 && nx < m && ny < n && field[nx][ny] == '.' && !vis[nx][ny])) { nx -= dx[(k+p)%4]; ny -= dy[(k+p)%4]; if (cnt == safeN) { for (int e = 0; e < 4; e++) { nx += dx[e]; ny += dy[e]; if (nx == j && ny == i) { cout << "YES" << endl; return 0; } nx -= dx[e]; ny -= dy[e]; } } } } // cout << endl; } break; } } if (cnt2 >= 6) break; } if (cnt2 >= 6) break; } cout << "NO" << endl; }