提出 #461698


ソースコード 拡げる

#include <bits/stdc++.h>

#include <iostream>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <sstream>
#include <set>
#include <map>
#include <algorithm>
#include <cstdio>
#include <cstdlib>



#define rep(i,n) for(int i=0;i<(int)(n);++i)
#define iter(a) __typeof(a.begin())
#define FOR(it,a) for(iter(a)it=a.begin();it!=a.end();++it)
#define F first
#define S second
#define SZ(a) (int)((a).size())
#define sz(a) SZ(a)
#define pb push_back
#define eb emplace_back
#define mp make_pair
#define ALL(a) (a).begin(),(a).end()
using namespace std;

typedef long long ll;
typedef pair<int,int> PI;
typedef unsigned long long ull;

#ifdef ONLINE_JUDGE
#define PR(...) (void(0))
#else
#define PR(...) do{cerr << "line : " << __LINE__ << ", " << endl; pr(#__VA_ARGS__, __VA_ARGS__);}while(0)
template<class T>
void pr(const string& name, T t){
  cerr << name << ": " << t << endl;
}
template<typename T, typename ... Types>
void pr(const string& names, T t, Types ... rest) {
  auto p = names.find(',');
  cerr << names.substr(0, p) << ": " << t << ", ";
  pr(string(names, p + 1), rest ...);
}
#endif

template<class T,class U> ostream& operator<< (ostream& o, const pair<T,U>& v){return o << "(" << v.F << ", " << v.S << ")";}
template<class T> ostream& operator<< (ostream& o, const vector<T>& v){o << "{";rep(i,SZ(v)) o << (i?", ":"") << v[i];return o << "}";}
template<class T,class U> ostream& operator<< (ostream& o, const map<T,U>& v){o << "{";for(const auto& e : v) o << e << ", ";return o << "}";}
template<class T> ostream& operator<< (ostream& o, const set<T>& v){o << "{";for(const auto& e : v) o << e << ", ";return o << "}";}
template<class T> string to_s(const T& v){ostringstream is;is << v;return is.str();}

const int dx[]={0,1,0,-1,1,1,-1,-1,0};
const int dy[]={1,0,-1,0,-1,1,1,-1,0};

#define endl '\n'


int n, m;
string in[1000];
string word[100];

int bu[100][100];

vector<pair<PI, PI> > kouho;
int use[100];

bool ok(int widx, int kidx){
  if(SZ(word[widx]) != kouho[kidx].S.S) return false;
  auto p = kouho[kidx].F;
  rep(j, SZ(word[widx])){
    int cx = p.F + dx[kouho[kidx].S.F] * j;
    int cy = p.S + dy[kouho[kidx].S.F] * j;
    if(bu[cx][cy] == 0 || in[cx][cy] == word[widx][j]) continue;
    return false;
  }
  return true;
}

void dfs(int ne){
  if(ne == m){
    rep(i, n) cout << in[i] << endl;
    exit(0);
  }

  rep(i, SZ(kouho)){
    if(use[i]) continue;
    if(!ok(ne, i)) continue;
    use[i] = 1;
    auto p = kouho[i].F;
    rep(j, SZ(word[ne])){
      in[p.F + dx[kouho[i].S.F] * j][p.S + dy[kouho[i].S.F] * j] = word[ne][j];
      ++bu[p.F + dx[kouho[i].S.F] * j][p.S + dy[kouho[i].S.F] * j];
    }
    dfs(ne + 1);
    rep(j, SZ(word[ne])){
      --bu[p.F + dx[kouho[i].S.F] * j][p.S + dy[kouho[i].S.F] * j];
    }    
    use[i] = 0;
  }
}

int main(int argc, char *argv[])
{
  ios::sync_with_stdio(0);
  cin.tie(0);

  cin >> m;
  rep(i, m) cin >> word[i];
  rep(i, n) cout << word[i] << endl;
  
  cin >> n;
  rep(i, n) cin >> in[i];
  
  rep(i, n) rep(j, SZ(in[i])){
    if(in[i][j] == '#') continue;
    // if(i && in[i - 1][j] == '.') continue;
    // if(j && in[i][j - 1] == '.') continue;
    if((i == 0 || in[i-1][j] == '#') && i + 1 < n && in[i + 1][j] == '.'){
      int len = 0;
      while(i + len < n && in[i + len][j] == '.') ++len;
      kouho.pb(mp(mp(i, j), mp(1, len)));
    }
    
    if((j == 0 || in[i][j-1] == '#') && j + 1 < SZ(in[i]) && in[i][j + 1] == '.'){
      int len = 0;
      while(j + len < SZ(in[i]) && in[i][j + len] == '.') ++len;
      kouho.pb(mp(mp(i, j), mp(0, len)));
    }
  }


  //PR(kouho);
  cout << n << endl;
  dfs(0);
}

提出情報

提出日時
問題 H - 恐怖!不幸を呼ぶ盾
ユーザ maguro
言語 C++11 (GCC 4.9.2)
得点 100
コード長 3784 Byte
結果 AC
実行時間 36 ms
メモリ 932 KiB

ジャッジ結果

セット名 All
得点 / 配点 100 / 100
結果
AC × 22
セット名 テストケース
All 00_sample_00.txt, 00_sample_01.txt, 10_min_00.txt, 10_min_01.txt, 10_min_02.txt, 20_max_00.txt, 20_max_01.txt, 20_max_02.txt, 50_small_00.txt, 50_small_01.txt, 50_small_02.txt, 90_random_00.txt, 90_random_01.txt, 90_random_02.txt, 90_random_03.txt, 90_random_04.txt, 90_random_05.txt, 90_random_06.txt, 90_random_07.txt, 90_random_08.txt, 90_random_09.txt, 99_final_00.txt
ケース名 結果 実行時間 メモリ
00_sample_00.txt AC 25 ms 932 KiB
00_sample_01.txt AC 24 ms 932 KiB
10_min_00.txt AC 26 ms 920 KiB
10_min_01.txt AC 24 ms 924 KiB
10_min_02.txt AC 24 ms 796 KiB
20_max_00.txt AC 25 ms 800 KiB
20_max_01.txt AC 26 ms 920 KiB
20_max_02.txt AC 27 ms 812 KiB
50_small_00.txt AC 27 ms 796 KiB
50_small_01.txt AC 27 ms 920 KiB
50_small_02.txt AC 31 ms 792 KiB
90_random_00.txt AC 26 ms 924 KiB
90_random_01.txt AC 26 ms 796 KiB
90_random_02.txt AC 27 ms 792 KiB
90_random_03.txt AC 27 ms 788 KiB
90_random_04.txt AC 25 ms 916 KiB
90_random_05.txt AC 26 ms 916 KiB
90_random_06.txt AC 25 ms 916 KiB
90_random_07.txt AC 25 ms 920 KiB
90_random_08.txt AC 27 ms 920 KiB
90_random_09.txt AC 23 ms 920 KiB
99_final_00.txt AC 36 ms 924 KiB