結果
問題 | No.179 塗り分け |
ユーザー |
|
提出日時 | 2016-05-13 16:20:52 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 4 ms / 3,000 ms |
コード長 | 1,250 bytes |
コンパイル時間 | 1,583 ms |
コンパイル使用メモリ | 168,352 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-07-23 14:36:35 |
合計ジャッジ時間 | 2,776 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 6 |
other | AC * 40 |
ソースコード
// スパゲティ #include<bits/stdc++.h> using namespace std; int data[200][200]; // 落ち対策 int ord[3000][2]; 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; } } 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; vector<int> memo(n+1,0); for (i=1;i<=n;i++){ x=ord[i][0]; y=ord[i][1]; if (memo[i]==0){ if (x+vx<0 || y+vy<0) goto l_cont; j= data[x+vx][y+vy]; if (j==0 || memo[j]!=0){ // HALT goto l_cont; } memo[j]=2; memo[i]=1; } } cout << "YES" << endl; return 0; l_cont: if (vx>=w-1){ vy++; vx=-w; } } l_no: cout << "NO" << endl; return 0; }