結果
問題 | No.179 塗り分け |
ユーザー |
![]() |
提出日時 | 2015-04-05 23:40:04 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 12 ms / 3,000 ms |
コード長 | 1,042 bytes |
コンパイル時間 | 609 ms |
コンパイル使用メモリ | 56,308 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-07-23 14:24:40 |
合計ジャッジ時間 | 1,728 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 6 |
other | AC * 40 |
ソースコード
#include <iostream> #include <cstdio> #include <cstring> int H, W; std::string S[50]; bool used[50][50]; bool can(int dx, int dy){ for(int i=0;i<H;i++){ for(int j=0;j<W;j++){ int ny = i + dy, nx = j + dx; if(!used[i][j] && S[i][j] == '#'){ if(!(0 <= nx && nx < W && 0 <= ny && ny < H)){return false;} if(used[ny][nx] || S[ny][nx] != '#'){return false;} used[i][j] = true; used[ny][nx] = true; } } } return true; } int main(){ std::cin >> H >> W; int count = 0; for(int i=0;i<H;i++){ std::cin >> S[i]; for(int j=0;j<W;j++){ if(S[i][j] == '#'){++count;} } } if(count < 2){ puts("NO"); return 0; } for(int i=-H;i<H;i++){ for(int j=-W;j<W;j++){ if(i == 0 && j == 0){continue;} memset(used, 0, sizeof(used)); if(can(j, i)){puts("YES"); return 0;} } } puts("NO"); }