結果

問題 No.13 囲みたい!
ユーザー itezpaceitezpace
提出日時 2016-09-01 12:10:19
言語 C++11
(gcc 11.4.0)
結果
TLE  
実行時間 -
コード長 2,436 bytes
コンパイル時間 651 ms
コンパイル使用メモリ 73,740 KB
実行使用メモリ 179,384 KB
最終ジャッジ日時 2024-04-27 14:08:16
合計ジャッジ時間 7,370 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
6,812 KB
testcase_01 AC 2 ms
6,940 KB
testcase_02 AC 1 ms
6,940 KB
testcase_03 TLE -
testcase_04 -- -
testcase_05 -- -
testcase_06 -- -
testcase_07 -- -
testcase_08 -- -
testcase_09 -- -
testcase_10 -- -
testcase_11 -- -
testcase_12 -- -
testcase_13 -- -
testcase_14 -- -
testcase_15 -- -
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <vector>
#include <tuple>
using namespace std;

int w,h,m;
int ary[100][100];
int mx[3]={1,-1,0};
int my[3]={0,0,-1};

int calc(int i,int j,int o,int tj,int ts,int te,vector<vector<int>> vv){
  int i2=i;
  int ret=0;
  for(int i=0; i<3; ++i){
    int px=o+mx[i];
    int py=j+my[i];
    if(0<=px && px<w && 0<=py && py<h && ary[py][px]==i2){
      if(py==tj && ts<=px && px>=te){
        ret=1;
      } else {
        vector<vector<int>> vv2=vv;
        if(vv2[py][px]==0){
          vv2[py][px]=1;
          ret+=calc(i2,py,px,tj,ts,te,vv2);
        }
      }
    }
  }
  return ret;
}

int main(){
  cin>>w>>h;
  int n=0;
  for(int i=0; i<h; ++i){
    for(int j=0; j<w; ++j){
      cin>>m;
      ary[i][j]=m;
      if(n<m) n=m;
    }
  }
  for(int i=1; i<=n; ++i){
    vector<tuple<int,int,int>> v;
    for(int j=0; j<h; ++j){
      int f=0;
      int s=101;
      int e=101;
      for(int k=0; k<w-1; ++k){
        int a=ary[j][k];
        if(a==i){
        int b=ary[j][k+1];
        if(f==0){
          if(a==b){
            s=k;
            f=1;
          }
        } else {
          if(a!=b || (a==b && k==w-2)){
            e=k;
            if(a==b && k==w-2) e=k+1;
            f=0;
            tuple<int,int,int> t=make_tuple(j,s,e);
            v.push_back(t);
            for(int l=0; l<v.size(); ++l){
              int& tj=get<0>(v[l]);
              int& ts=get<1>(v[l]);
              int& te=get<2>(v[l]);
              if(tj<j){
                int x=0;
                for(int o=s; o<=e; ++o){
                  if(ary[j-1][o]==i){
                    if(o<e && ary[j-1][o+1]==i){
                      cout<<"possible"<<endl;
                      return 0;
                    } else {
                      vector<vector<int>> vv;
                      vv.resize(h);
                      for(int i2=0;i2<h;++i2){
                        vv[i2].resize(w);
                        for(int j2=0;j2<w;++j2){
                          vv[i2][j2]=0;
                        }
                      }
                      int y=calc(i,j-1,o,tj,ts,te,vv);
                      if(y>0) x+=1;
                    }
                  }
                }
                if(x>=2) {
                  cout<<"possible"<<endl;
                  return 0;
                }
              }
            } 
          }
        }
        }
      }
    }
  }
  cout<<"impossible"<<endl;
  return 0;
}
0