#include #define N 7 int main(void) { while(1){ int n, m, p; int d[N][N][N]; // 盤面 int top[N][N]; // 一番上の位置を保持しておく int turn=1; // 1:black 2:white // 列の確認用の移動量 // 平面縦横 平面斜め 立体斜め int dx[26]={1,0,0, -1, 0, 0, -1, 1, 1,-1, 0, 0, 0, 0, -1, 1, 1,-1, -1,-1, 1, 1, 1, 1, -1, -1 }; int dy[26]={0,1,0, 0,-1, 0, -1,-1, 1, 1, -1, 1, 1,-1, 0, 0, 0, 0, -1,-1, -1,-1, 1, 1, 1, 1 }; int dz[26]={0,0,1, 0, 0,-1, 0, 0, 0, 0, -1,-1, 1, 1, -1,-1, 1, 1, -1, 1, -1, 1, -1, 1, -1, 1 }; // n,m,p入力 cin >> n >> m >> p; if(n+m+p==0) break; // 初期化 for(int z=0; z> x >> y; // 盤に駒を置く d[x-1][y-1][top[x-1][y-1]]=turn; // 勝負がついてるときはやらない if(!flag){ // 列ができたか判定 // (1)同一平面 縦横 3方向 (向きを考えると6方向) // (2)同一平面 斜め 6方向 ( 〃 12方向) // (3)立体的に斜め 4方向 ( 〃 8方向) for(int j=0; j<26; j++){ int ct=0; // 列のカウント用 int xx=x-1, yy=y-1, zz=top[x-1][y-1]; // 現在の場所 while(d[xx][yy][zz]==turn){ xx+=dx[j]; yy+=dy[j]; zz+=dz[j]; ct++; if(xx<0 || yy<0 || zz<0 || xx>=n || yy>=n || zz>=n) break; } if(ct>=m){ flag=true; if(turn==1){ cout << "Black " << i+1 << endl; }else{ cout << "White " << i+1 << endl; } break; } } } // 駒をおいたのでおける場所を1つ上にする top[x-1][y-1]++; // 順番交替 if(turn==1){ turn=2; }else{ turn=1; } } if(!flag) cout << "Draw" << endl; // 盤面確認 /* cout << endl; for(int z=0; z