読者です 読者をやめる 読者になる 読者になる

Tamflexの貯蔵庫

やる気のない備忘録

abc 039

abc039.contest.atcoder.jp

白の周囲を白にして、その後黒の周囲を黒にして元に戻るか判定する.

int h,w;
int a[100][100];
int b[100][100];
int c[100][100];
 
bool range(int x, int y)
{
  return x >= 0 && x < h && y >= 0 && y < w;
}
 
int main()
{
  cin >> h >> w;
  REP(i,h)
  {
    string s; cin >> s;
    REP(j,s.size())
    {
      a[i][j] = (s[j]=='#'?1:0);
      b[i][j] = a[i][j];
    }
  }
  REP(i,h) REP(j,w) if(!a[i][j])
  {
    for(int k=-1;k<=1;k++) for(int l=-1;l<=1;l++) if(range(i+k,j+l))
      b[i+k][j+l] = 0;
  }
  REP(i,h) REP(j,w) if(b[i][j])
  {
    for(int k=-1;k<=1;k++) for(int l=-1;l<=1;l++) if(range(i+k,j+l))
      c[i+k][j+l] = 1;
  }
  REP(i,h) REP(j,w) if(a[i][j]!=c[i][j])
  {
    cout << "impossible" << endl;
    return 0;
  }
  cout << "possible" << endl;
  REP(i,h) REP(j,w)
  {
    cout << (b[i][j]?"#":".");
    if(j==w-1) cout << "\n";
  }
  return 0;
}