結果
問題 | No.1427 Simplified Tetris |
ユーザー |
![]() |
提出日時 | 2021-03-12 22:53:26 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 27 ms / 2,000 ms |
コード長 | 2,099 bytes |
コンパイル時間 | 6,355 ms |
コンパイル使用メモリ | 263,796 KB |
最終ジャッジ日時 | 2025-01-19 15:29:52 |
ジャッジサーバーID (参考情報) |
judge5 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 37 |
ソースコード
#include <stdio.h>#include <atcoder/all>#include <bits/stdc++.h>using namespace std;using namespace atcoder;using mint = modint1000000007;#define rep(i,n) for (int i = 0; i < (n); ++i)#define Inf 1000000000int H,W;int get(int y,int x){return y*W+x;}pair<int,int> get(int v){return make_pair(v/W,v%W);}string alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";void go(vector<string> S){/*rep(i,S.size()){cout<<S[i]<<endl;}*/int cnt = 0;mf_graph<int> G(H*W+2);int s = H*W,t = H*W+1;vector<int> dx = {1,-1,0,0},dy = {0,0,1,-1};rep(i,H){rep(j,W){if(S[i][j]=='#')cnt++;else continue;if((i+j)%2==0){G.add_edge(s,get(i,j),1);rep(k,4){int y = i+dy[k],x = j + dx[k];if(y<0||y>=H||x<0||x>=W)continue;G.add_edge(get(i,j),get(y,x),1);}}else G.add_edge(get(i,j),t,1);}}// cout<<cnt<<endl;if(G.flow(s,t)*2!=cnt)return;int ind = 0;auto E = G.edges();for(auto e:E){if(e.from==s||e.to==t)continue;if(e.flow==0)continue;int u = e.from,v = e.to;auto A = get(u),B = get(v);if(S[A.first][A.second]!='#')continue;S[A.first][A.second] = alpha[ind];S[B.first][B.second] = alpha[ind];ind++;}cout<<"Yes"<<endl;rep(i,S.size()){cout<<S[i]<<endl;}exit(0);}int main(){cin>>H>>W;vector<string> S(H);rep(i,H)cin>>S[i];int u = -1,b = -1;rep(i,H){if(S[i]!=string(W,'.')){if(u==-1)u = i;b = i;}}rep(i,H){int c = 0;rep(j,W){if(S[i][j]=='.')c++;}if(c==0){cout<<"No"<<endl;return 0;}}if(u==-1){cout<<"Yes"<<endl;rep(i,H){cout<<S[i]<<endl;}return 0;}if(b!=H-1){cout<<"No"<<endl;return 0;}for(int j=u;j<=b;j++){if(S[j]==string(W,'.')){cout<<"No"<<endl;return 0;}}rep(i,1<<H){int cur = H-1;vector<string> SS(H,string(W,'.'));for(int j=H-1;j>=0;j--){if((i>>j)&1){SS[j] = string(W,'#');}else{if(cur<u)continue;SS[j] = S[cur];cur--;}}if(cur>=u)continue;go(SS);}cout<<"No"<<endl;return 0;}