結果
| 問題 |
No.179 塗り分け
|
| コンテスト | |
| ユーザー |
airuai
|
| 提出日時 | 2016-09-17 12:51:03 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 33 ms / 3,000 ms |
| コード長 | 1,622 bytes |
| コンパイル時間 | 539 ms |
| コンパイル使用メモリ | 58,288 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-07-23 14:38:46 |
| 合計ジャッジ時間 | 2,028 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 6 |
| other | AC * 40 |
ソースコード
#include <iostream>
using namespace std;
int main() {
int h, w;
cin >> h;
cin >> w;
char c;
int sum = 0;
int k, logx, logy;
bool** dp = new bool*[h];
bool** flag = new bool*[h];
for (int i = 0; i < h; ++i) {
dp[i] = new bool[w];
flag[i] = new bool[w];
for (int j = 0; j < w; ++j) {
flag[i][j] = false;
cin >> c;
if (c == '#') {
++sum;
dp[i][j] = true;
}
else{
dp[i][j] = false;
}
}
}
if (sum % 2 == 1 || sum == 0) {
cout << "NO" << endl;
return 0;
}
int count = 0;
for (int i = 0; i < h; ++i) {
for (int j = 0; j < w; ++j, count = 0) {
if (i == 0 && j == 0) {
continue;
}
for (int a = 0; a < h - i; ++a) {
for (int b = 0; b < w - j; ++b) {
if (dp[a + i][b + j] && dp[a][b] && !flag[a + i][b + j] && !flag[a][b]) {
++count;
flag[a + i][b + j] = true;
flag[a][b] = true;
}
}
}
if (count == sum / 2) {
cout << "YES" << endl;
return 0;
}
else {
for (int k = 0; k < h; ++k) {
for (int l = 0; l < w; ++l) {
flag[k][l] = false;
}
}
}
}
for (int j = -(w - 1); j < 0; ++j, count = 0) {
for (int a = 0; a < h - i; ++a) {
for (int b = 0; b < w + j; ++b) {
if (dp[a + i][b] && dp[a][b - j] && !flag[a + i][b] && !flag[a][b - j]) {
++count;
flag[a + i][b] = true;
flag[a][b - j] = true;
}
}
}
if (count == sum / 2) {
cout << "YES" << endl;
return 0;
}
else {
for (int k = 0; k < h; ++k) {
for (int l = 0; l < w; ++l) {
flag[k][l] = false;
}
}
}
}
}
cout << "NO" << endl;
return 0;
}
airuai