1970:The Game

keyword

C++

概要

五目並べの盤面が与えられる。どちらが勝っているか、どこに5連があるかを答える問題。ただし5連は多くても1つしか存在しない。
長連になっていないことさえ注意すれば得に問題は無い。番兵を置いておけば楽できる。

int main(){
    int board[40][40], i, j, x, y, rept, win;
    scanf("%d",&rept);

    while(rept--){
        REP(i,40)REP(j,40)board[i][j] = 0;
        for(i=10;i<29;i++)for(j=10;j<29;j++)scanf("%d",board[i]+j);

        for(j=10;j<29;j++)for(i=10;i<29;i++)if(board[i][j]>0){
            win = board[i][j];
            if((board[i+1][j] == win &&
                    board[i+2][j] == win &&
                    board[i+3][j] == win &&
                    board[i+4][j] == win &&
                    board[i+5][j] != win &&
                    board[i-1][j] != win)
              ||(board[i][j+1] == win &&
                    board[i][j+2] == win &&
                    board[i][j+3] == win &&
                    board[i][j+4] == win &&
                    board[i][j+5] != win &&
                    board[i][j-1] != win)
              ||(board[i+1][j+1] == win &&
                    board[i+2][j+2] == win &&
                    board[i+3][j+3] == win &&
                    board[i+4][j+4] == win &&
                    board[i+5][j+5] != win &&
                    board[i-1][j-1] != win)
              ||(board[i-1][j+1] == win &&
                    board[i-2][j+2] == win &&
                    board[i-3][j+3] == win &&
                    board[i-4][j+4] == win &&
                    board[i-5][j+5] != win &&
                    board[i+1][j-1] != win)){
                y = i-9;
                x = j-9;
                goto end;
            }
        }
end:;
        if(i==29 && j==29) printf("0\n");
        else printf("%d\n%d %d\n",win,y,x);
    }

    return 0;
}