結果
| 問題 |
No.179 塗り分け
|
| ユーザー |
|
| 提出日時 | 2016-06-15 14:31:42 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 3 ms / 3,000 ms |
| コード長 | 1,252 bytes |
| コンパイル時間 | 1,753 ms |
| コンパイル使用メモリ | 166,676 KB |
| 実行使用メモリ | 6,948 KB |
| 最終ジャッジ日時 | 2024-07-23 14:38:22 |
| 合計ジャッジ時間 | 2,916 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 6 |
| other | AC * 40 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
int data[200][200]; // 落ち対策
int ord[3000][2];
int memo[30001];
int main(){
int i, j, k, l;
int h,w,n;
int x,y;
cin >> h>>w;
n=0;
for (y=0;y<h;y++)
for (int x=0;x<w;x++){
char c;while ((cin >> c),c<32);
if (c=='#'){
n+=1;
data[x][y]=n;
ord[n][0]=x;
ord[n][1]=y;
}
}
int m=0;
if (n%2==1 || n==0){
goto l_no;
}
int vx,vy;
for (vx=-w+1,vy=-h+1;vy<h;vx++){
if (vy==0 && vx==0) continue;
for (i=1;i<=n;i++){
x=ord[i][0];
y=ord[i][1];
if (memo[i]<=m){
if (x+vx<0 || y+vy<0) goto l_cont;
j= data[x+vx][y+vy];
if (j==0 || memo[j]>m){
// HALT
goto l_cont;
}
memo[j]=2+m;
memo[i]=1+m;
}
}
cout << "YES" << endl;
return 0;
l_cont:
if (vx>=w-1){
vy++;
vx=-w;
}
m+=3;
}
l_no:
cout << "NO" << endl;
return 0;
}