Submission #298319


Source Code Expand

#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include <vector>
#include <deque>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <algorithm>
#include <utility>
#include <bitset>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <cstring>
#include <cstdio>

using namespace std;

#define REP(i,n) for((i)=0;(i)<(int)(n);(i)++)
#define foreach(c,itr) for(__typeof((c).begin()) itr=(c).begin();itr!=(c).end();itr++)

string mp[12];

typedef pair<int,int> P;

const int di[4] = {-1,1,0,0};
const int dj[4] = {0,0,-1,1};

bool visited[12][12];
bool is_connected(int si, int sj) {
  memset(visited, 0, sizeof visited);
  queue<P> Q;
  Q.push(P(si, sj));

  while (!Q.empty()) {

    P p = Q.front(); Q.pop();
    int ci = p.first, cj = p.second;

    if (visited[ci][cj]) continue;

    //printf("%d,%d pop!\n", ci, cj);

    visited[ci][cj] = true;

    for(int i = 0; i < 4;i++) {
      int ni = ci + di[i], nj = cj + dj[i];
      if (ni < 0 || nj < 0 || 10 <= ni || 10 <= nj || mp[ni][nj] == 'x') continue;
      if (visited[ni][nj]) continue;
      Q.push(P(ni, nj));
    }
  }

  // chck

  for (int i = 0; i < 10; i++) {
    for (int j = 0; j < 10; j++) {
      if (mp[i][j] == 'o' && !visited[i][j]) {
        //printf("%d-%d : false by %d,%d\n", si, sj, i, j);
        return false;
      }
    }
  }

  return true;
}

int solve() {

  int si = -1, sj = -1;
  for (int i = 0; i < 10; i++) {
    for (int j = 0; j < 10; j++) {
      if (mp[i][j] == 'o') {
        si = i, sj = j;
        break;
      }
    }
    if (si != -1) break;
  }

  for (int i = 0; i < 10; i++) {
    for (int j = 0; j < 10; j++) {
      if (mp[i][j] == 'x') {
        mp[i][j] = 'o';
        //printf("call by %d,%d\n", i, j);

        //for (int k = 0; k < 10; k++) cout << mp[k] << endl;

        if (is_connected(si, sj)) return 1;
        mp[i][j] = 'x';
      }
    }
  }

  return 0;
}

int main() {
  while (cin >> mp[0]) {
    for (int i = 1; i < 10; i++) {
      cin >> mp[i];
    }
    printf("%s\n", solve() ? "YES" : "NO");
  }
  return 0;
}

Submission Info

Submission Time
Task B - 埋め立て
User brly
Language C++ (G++ 4.6.4)
Score 100
Code Size 2208 Byte
Status AC
Exec Time 25 ms
Memory 928 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 100 / 100
Status
AC × 3
AC × 33
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 10_rand_00.txt, 10_rand_01.txt, 10_rand_02.txt, 10_rand_03.txt, 10_rand_04.txt, 10_rand_05.txt, 10_rand_06.txt, 10_rand_07.txt, 10_rand_08.txt, 10_rand_09.txt, 10_rand_10.txt, 10_rand_11.txt, 10_rand_12.txt, 10_rand_13.txt, 10_rand_14.txt, 10_rand_15.txt, 10_rand_16.txt, 10_rand_17.txt, 10_rand_18.txt, 10_rand_19.txt, 10_rand_20.txt, 10_rand_21.txt, 10_rand_22.txt, 10_rand_23.txt, 10_rand_24.txt, 10_rand_25.txt, 10_rand_26.txt, 10_rand_27.txt, 10_rand_28.txt, 10_rand_29.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 23 ms 796 KB
00_sample_01.txt AC 25 ms 800 KB
00_sample_02.txt AC 21 ms 804 KB
10_rand_00.txt AC 22 ms 928 KB
10_rand_01.txt AC 23 ms 924 KB
10_rand_02.txt AC 22 ms 700 KB
10_rand_03.txt AC 22 ms 808 KB
10_rand_04.txt AC 22 ms 676 KB
10_rand_05.txt AC 22 ms 796 KB
10_rand_06.txt AC 23 ms 800 KB
10_rand_07.txt AC 22 ms 796 KB
10_rand_08.txt AC 22 ms 800 KB
10_rand_09.txt AC 21 ms 676 KB
10_rand_10.txt AC 22 ms 736 KB
10_rand_11.txt AC 23 ms 736 KB
10_rand_12.txt AC 21 ms 924 KB
10_rand_13.txt AC 25 ms 796 KB
10_rand_14.txt AC 23 ms 764 KB
10_rand_15.txt AC 22 ms 920 KB
10_rand_16.txt AC 23 ms 800 KB
10_rand_17.txt AC 22 ms 920 KB
10_rand_18.txt AC 22 ms 672 KB
10_rand_19.txt AC 21 ms 800 KB
10_rand_20.txt AC 21 ms 804 KB
10_rand_21.txt AC 23 ms 684 KB
10_rand_22.txt AC 21 ms 796 KB
10_rand_23.txt AC 23 ms 800 KB
10_rand_24.txt AC 21 ms 760 KB
10_rand_25.txt AC 23 ms 736 KB
10_rand_26.txt AC 21 ms 928 KB
10_rand_27.txt AC 22 ms 800 KB
10_rand_28.txt AC 22 ms 804 KB
10_rand_29.txt AC 25 ms 924 KB