1249 - Make a Sequence

問題

ソース

int ba[7][7][7];
int n, m;

int d[13][3] = {{1,0,0},{0,1,0},{0,0,1},
                {1,1,0},{0,1,1},{1,0,1},{1,-1,0},{0,1,-1},{-1,0,1},
                {1,1,1},{1,1,-1},{1,-1,1},{-1,1,1}};
bool judge(vector<int> p, int c) {
  vector<int> a(3);
  REP(i, 13) {
    int cnt = 0;
    for (int k=-10; k<=10; ++k) {
      bool f = 0;
      REP(j, 3) {
        a[j] = p[j] + d[i][j] * k;
        if (a[j] < 0 || a[j] >= n) f = 1;
      }
      if (f) continue;
      if (ba[a[0]][a[1]][a[2]] == c) cnt++;
      else cnt = 0;
      if (cnt == m) return 1;
    }
  }
  return 0;
}

int main() {
  int p;
  string ans[2] = {"Black", "White"};
  while(cin>>n>>m>>p, n||m||p) {
    memset(ba, 0, sizeof (ba));

    int num[n][n];
    memset(num, 0, sizeof(num));

    int x[p], y[p], z[p];
    REP(i, p) {
      cin >> x[i] >> y[i];
      x[i]--; y[i]--;
      z[i] = num[x[i]][y[i]]++;
    }
    bool f = 0;
    REP(i, p) {
      ba[x[i]][y[i]][z[i]] = i%2 + 1;
      vector<int> v(3);
      v[0] = x[i]; v[1] = y[i]; v[2] = z[i];
      if (judge(v,i%2 + 1)) {
        cout << ans[i%2] << " " << i+1 << endl;
        f = 1;
        break;
      }
    }
    if (!f) {
      cout << "Draw" << endl;
    }
  }
}