Submission

Status:

-P-----------P----PP

Subtask/Task Score:

20/100

Score: 20

User: TonnamSora

Problemset: Othello

Language: cpp

Time: 0.002 second

Submitted On: 2025-10-13 23:00:37

#include <iostream>
#include <algorithm>
using namespace std;
char board[8][8];

void print(){
    for(int i = 0; i < 8; i++){
        for(int j = 0; j < 8; j++){
            cout << board[i][j];
        }
        cout << "\n";
    }
}

void right(int a, int b, char c){
    int pos = -1;
    for(int i = b + 1; i < 8; i++){
        if(board[a][i] == '_' && i >= 8){
            break;
        }
        if(board[a][i] == c && i >= 8){
            pos = i;
            break;
        }
    }
    if(pos != -1){
        for(int i = b; i < pos; i++){
            board[a][i] = c;
        }
    }
}

void left(int a, int b, char c){
    int pos = -1;
    for(int i = b - 1; i >= 0; i--){
        if(board[a][i] == '_' && i >= 8){
            break;
        }
        if(board[a][i] == c && i >= 8){
            pos = i;
            break;
        }
    }
    if(pos != -1){
        for(int i = b; i >= pos; i--){
            board[a][i] = c;
        }
    }
}

void down(int a, int b, char c){
    int pos = -1;
    for(int i = a + 1; i < 8; i++){
        if(board[i][b] == '_' && i >= 8){
            break;
        }
        if(board[i][b] == c && i >= 8){
            pos = i;
            break;
        }
    }
    if(pos != -1){
        for(int i = a; i < pos; i++){
            board[i][b] = c;
        }
    }
}

void up(int a, int b, char c){
    int pos = -1;
    for(int i = a - 1; i >= 0; i--){
        if(board[i][b] == '_' && i >= 8){
            break;
        }
        if(board[i][b] == c && i >= 8){
            pos = i;
            break;
        }
    }
    if(pos != -1){
        for(int i = a; i >= pos; i--){
            board[i][b] = c;
        }
    }
}

void upleft(int a, int b, char c) {
    int posa = -1, posb = -1;
    for(int i = 1; a - i >= 0 && b - i >= 0; i++) {
        if(board[a - i][b - i] == '_' && i >= 8){
            break;
        }
        if(board[a - i][b - i] == c && i >= 8) {
            posa = a - i;
            posb = b - i;
            break;
        }
    }
    if(posa != -1) {
        for(int i = 0; a - i >= posa && b - i >= posb; i++) {
            board[a - i][b - i] = c;
        }
    }
}

void upright(int a, int b, char c) {
    int posa = -1, posb = -1;
    for(int i = 1; a - i >= 0 && b + i < 8; i++) {
        if(board[a - i][b + i] == '_' && i >= 8){
            break;
        }
        if(board[a - i][b + i] == c && i >= 8) {
            posa = a - i;
            posb = b + i;
            break;
        }
    }
    if(posa != -1) {
        for(int i = 0; a - i >= posa && b + i <= posb; i++) {
            board[a - i][b + i] = c;
        }
    }
}

void downright(int a, int b, char c) {
    int posa = -1, posb = -1;
    for(int i = 1; a + i < 8 && b + i < 8; i++) {
        if(board[a + i][b + i] == '_' && i >= 8){
            break;
        }
        if(board[a + i][b + i] == c && i >= 8) {
            posa = a + i;
            posb = b + i;
            break;
        }
    }
    if(posa != -1) {
        for(int i = 0; a + i <= posa && b + i <= posb; i++) {
            board[a + i][b + i] = c;
        }
    }
}

void downleft(int a, int b, char c) {
    int posa = -1, posb = -1;
    for(int i = 1; a + i < 8 && b - i >= 0; i++) {
        if(board[a + i][b - i] == '_' && i >= 8){
            break;
        }
        if(board[a + i][b - i] == c && i >= 8) {
            posa = a + i;
            posb = b - i;
            break;
        }
    }
    if(posa != -1) {
        for(int i = 0; a + i <= posa && b - i >= posb; i++) {
            board[a + i][b - i] = c;
        }
    }
}

void place(int a, int b, char c){
    board[a][b] = c;
    right(a, b, c);
    left(a, b, c);
    down(a, b, c);
    up(a, b, c);
    upleft(a, b, c);
    upright(a, b, c);
    downright(a, b, c);
    downleft(a, b, c);
}

int main(){
    for(int i = 0; i < 8; i++){
        for(int j = 0; j < 8; j++){
            cin >> board[i][j];
        }
    }
    int a, b;
    char c;
    int idx = 0;
    while(1){
        cin >> a >> b;
        if(a < 0 || b < 0){
            break;
        }
        if(idx % 2 == 0){
            c = 'B';
        }
        else{
            c = 'W';
        }
        place(a, b, c);
        int cnt = 0;
        for(int i = 0; i < 8; i++){
            for(int j = 0; j < 8; j++){
                if(board[i][j] == '_'){
                    cnt++;
                }
            }
        }
        if(cnt == 0){
            break;
        }
        idx++;
    }
    //cin >> a >> b;
    //downleft(a, b, c);
    print();
    int black = 0, white = 0;
    for(int i = 0; i < 8; i++){
        for(int j = 0; j < 8; j++){
            if(board[i][j] == 'W'){
                white++;
            }
            if(board[i][j] == 'B'){
                black++;
            }
        }
    }
    if(white == black){
        cout << "draw";
    }
    if(white > black){
        cout << "white wins";
    }
    if(white < black){
        cout << "black wins";
    }
}