Submission

Status:

PPPPPP-PPP---P----PP

Subtask/Task Score:

60/100

Score: 60

User: TonnamSora

Problemset: Othello

Language: cpp

Time: 0.002 second

Submitted On: 2025-10-13 11:49:49

#include <iostream>
using namespace std;

int main(){
    char board[8][8];
    int idx = 0;
    int idxr = 0, idxc = 0;
    for(int i = 0; i < 8; i++){
        for(int j = 0; j < 8; j++){
            cin >> board[i][j];
        }
    }
    int N = 0;
    for(int i = 0; i < 8; i++){
        for(int j = 0; j < 8; j++){
            if(board[i][j] == '_'){
                N++;
            }
        }
    }
    int r[64],c[64];
    cin >> r[0] >> c[0];
    while(r[idx] >= 0 && idx < N - 1){
        idx++;
        cin >> r[idx] >> c[idx];
    }
    idx = 0;
    int cnt;
    while(r[idx] >= 0){
        //cin >> r[idx] >> c[idx];
        if(idx % 2 == 0){
            board[r[idx]][c[idx]] = 'B';
            cnt = 0;
            idxc = c[idx] + 1;
            idxr = r[idx];
            while(idxc + 1 < 8 && board[idxr][idxc] == 'W'){
                if(board[idxr][idxc + 1] == 'B'){
                    cnt++;
                }
                idxc++;
            }
            idxc = c[idx] + 1;
            if(cnt >= 1){
                while(idxc < 8 && board[idxr][idxc] == 'W'){
                    board[idxr][idxc] = 'B';
                    idxc++;
                }
            }
            
            cnt = 0;
            idxc = c[idx] - 1;
            idxr = r[idx];
            while(idxc - 1 >= 0 && board[idxr][idxc] == 'W'){
                if(board[idxr][idxc - 1] == 'B'){
                    cnt++;
                }
                idxc++;
            }
            idxc = c[idx] - 1;
            if(cnt >= 1){
                while(idxc >= 0 && board[idxr][idxc] == 'W'){
                    board[idxr][idxc] = 'B';
                    idxc--;
                }
            }
            cnt = 0;
            idxc = c[idx];
            idxr = r[idx] + 1;
            while(idxr + 1 < 8 && board[idxr][idxc] == 'W'){
                if(board[idxr + 1][idxc] == 'B'){
                    cnt++;
                }
                idxr++;
            }
            idxr = r[idx] + 1;
            if(cnt >= 1){
                while(idxr < 8 && board[idxr][idxc] == 'W'){
                    board[idxr][idxc] = 'B';
                    idxr++;
                }
            }
            cnt = 0;
            idxc = c[idx];
            idxr = r[idx] - 1;
            while(idxr - 1 >= 0 && board[idxr][idxc] == 'W'){
                if(board[idxr - 1][idxc] == 'B'){
                    cnt++;
                }
                idxr--;
            }
            idxr = r[idx] - 1;
            if(cnt >= 1){
                while(idxr >= 0 && board[idxr][idxc] == 'W'){
                    board[idxr][idxc] = 'B';
                    idxr--;
                }
            }
            cnt = 0;
            idxc = c[idx] + 1;
            idxr = r[idx] + 1;
            while(idxr + 1 < 8 && idxc + 1 < 8 && board[idxr][idxc] == 'W'){
                if(board[idxr + 1][idxc + 1] == 'B'){
                    cnt++;
                }
                idxc++;
                idxr++;
            }
            idxc = c[idx] + 1;
            idxr = r[idx] + 1;
            if(cnt >= 1){
                while(idxr < 8 && idxc < 8 && board[idxr][idxc] == 'W'){
                    board[idxr][idxc] = 'B';
                    idxr++;
                    idxc++;
                }
            }
            cnt = 0;
            idxc = c[idx] - 1;
            idxr = r[idx] + 1;
            while(idxr + 1 < 8 && idxc - 1 >= 0 && board[idxr][idxc] == 'W'){
                if(board[idxr + 1][idxc - 1] == 'B'){
                    cnt++;
                }
                idxc--;
                idxr++;
            }
            idxc = c[idx] - 1;
            idxr = r[idx] + 1;
            if(cnt >= 1){
                while(idxr < 8 && idxc >= 0 && board[idxr][idxc] == 'W'){
                    board[idxr][idxc] = 'B';
                    idxr++;
                    idxc--;
                }
            }
            cnt = 0;
            idxc = c[idx] - 1;
            idxr = r[idx] - 1;
            while(idxr - 1 >= 0 && idxc - 1 >= 0 && board[idxr][idxc] == 'W'){
                if(board[idxr - 1][idxc - 1] == 'B'){
                    cnt++;
                }
                idxc--;
                idxr--;
            }
            idxc = c[idx] - 1;
            idxr = r[idx] - 1;
            if(cnt >= 1){
                while(idxr >= 0 && idxc >= 0 && board[idxr][idxc] == 'W'){
                    board[idxr][idxc] = 'B';
                    idxr--;
                    idxc--;
                }
            }
            cnt = 0;
            idxc = c[idx] + 1;
            idxr = r[idx] - 1;
            while(idxr - 1 >= 0 && idxc + 1 < 8 && board[idxr][idxc] == 'W'){
                if(board[idxr - 1][idxc + 1] == 'B'){
                    cnt++;
                }
                idxc++;
                idxr--;
            }
            idxc = c[idx] + 1;
            idxr = r[idx] - 1;
            if(cnt >= 1){
                while(idxr >= 0 && idxc < 8 && board[idxr][idxc] == 'W'){
                    board[idxr][idxc] = 'B';
                    idxr--;
                    idxc++;
                }
            }
        }//B
        else{
            board[r[idx]][c[idx]] = 'W';
            cnt = 0;
            idxc = c[idx] + 1;
            idxr = r[idx];
            while(idxc + 1 < 8 && board[idxr][idxc] == 'B'){
                if(board[idxr][idxc + 1] == 'W'){
                    cnt++;
                }
                idxc++;
            }
            idxc = c[idx] + 1;
            if(cnt >= 1){
                while(idxc < 8 && board[idxr][idxc] == 'B'){
                    board[idxr][idxc] = 'W';
                    idxc++;
                }
            }
            
            cnt = 0;
            idxc = c[idx] - 1;
            idxr = r[idx];
            while(idxc - 1 >= 0 && board[idxr][idxc] == 'B'){
                if(board[idxr][idxc - 1] == 'W'){
                    cnt++;
                }
                idxc++;
            }
            idxc = c[idx] - 1;
            if(cnt >= 1){
                while(idxc >= 0 && board[idxr][idxc] == 'B'){
                    board[idxr][idxc] = 'W';
                    idxc--;
                }
            }
            cnt = 0;
            idxc = c[idx];
            idxr = r[idx] + 1;
            while(idxr + 1 < 8 && board[idxr][idxc] == 'B'){
                if(board[idxr + 1][idxc] == 'W'){
                    cnt++;
                }
                idxr++;
            }
            idxr = r[idx] + 1;
            if(cnt >= 1){
                while(idxr < 8 && board[idxr][idxc] == 'B'){
                    board[idxr][idxc] = 'W';
                    idxr++;
                }
            }
            cnt = 0;
            idxc = c[idx];
            idxr = r[idx] - 1;
            while(idxr - 1 >= 0 && board[idxr][idxc] == 'B'){
                if(board[idxr - 1][idxc] == 'W'){
                    cnt++;
                }
                idxr--;
            }
            idxr = r[idx] - 1;
            if(cnt >= 1){
                while(idxr >= 0 && board[idxr][idxc] == 'B'){
                    board[idxr][idxc] = 'W';
                    idxr--;
                }
            }
            cnt = 0;
            idxc = c[idx] + 1;
            idxr = r[idx] + 1;
            while(idxr + 1 < 8 && idxc + 1 < 8 && board[idxr][idxc] == 'B'){
                if(board[idxr + 1][idxc + 1] == 'W'){
                    cnt++;
                }
                idxc++;
                idxr++;
            }
            idxc = c[idx] + 1;
            idxr = r[idx] + 1;
            if(cnt >= 1){
                while(idxr < 8 && idxc < 8 && board[idxr][idxc] == 'B'){
                    board[idxr][idxc] = 'W';
                    idxr++;
                    idxc++;
                }
            }
            cnt = 0;
            idxc = c[idx] - 1;
            idxr = r[idx] + 1;
            while(idxr + 1 < 8 && idxc - 1 >= 0 && board[idxr][idxc] == 'B'){
                if(board[idxr + 1][idxc - 1] == 'W'){
                    cnt++;
                }
                idxc--;
                idxr++;
            }
            idxc = c[idx] - 1;
            idxr = r[idx] + 1;
            if(cnt >= 1){
                while(idxr < 8 && idxc >= 0 && board[idxr][idxc] == 'B'){
                    board[idxr][idxc] = 'W';
                    idxr++;
                    idxc--;
                }
            }
            cnt = 0;
            idxc = c[idx] - 1;
            idxr = r[idx] - 1;
            while(idxr - 1 >= 0 && idxc - 1 >= 0 && board[idxr][idxc] == 'B'){
                if(board[idxr - 1][idxc - 1] == 'W'){
                    cnt++;
                }
                idxc--;
                idxr--;
            }
            idxc = c[idx] - 1;
            idxr = r[idx] - 1;
            if(cnt >= 1){
                while(idxr >= 0 && idxc >= 0 && board[idxr][idxc] == 'B'){
                    board[idxr][idxc] = 'W';
                    idxr--;
                    idxc--;
                }
            }
            cnt = 0;
            idxc = c[idx] + 1;
            idxr = r[idx] - 1;
            while(idxr - 1 >= 0 && idxc + 1 < 8 && board[idxr][idxc] == 'B'){
                if(board[idxr - 1][idxc + 1] == 'W'){
                    cnt++;
                }
                idxc++;
                idxr--;
            }
            idxc = c[idx] + 1;
            idxr = r[idx] - 1;
            if(cnt >= 1){
                while(idxr >= 0 && idxc < 8 && board[idxr][idxc] == 'B'){
                    board[idxr][idxc] = 'W';
                    idxr--;
                    idxc++;
                }
            }
        }//W
        int x = 0;
        for(int i = 0; i < 8; i++){
            for(int j = 0; j < 8; j++){
                if(board[i][j] == '_'){
                    x++;
                }
            }
        }
        if(r[0] < 0){
            x = 0;
        }
        if(x == 0){
            int w = 0, b = 0;
            for(int i = 0; i < 8; i++){
                for(int j = 0; j < 8; j++){
                    cout << board[i][j];
                    if(board[i][j] == 'W'){
                        w++;
                    }
                    if(board[i][j] == 'B'){
                        b++;
                    }
                }
                cout << "\n";
            }
            if(w > b){
                cout << "white wins";
            }
            if(w < b){
                cout << "black wins";
            }
            if(w == b){
                cout << "draw";
            }
            return 0;
        }
        idx++;
    }
    int w = 0, b = 0;
    for(int i = 0; i < 8; i++){
        for(int j = 0; j < 8; j++){
            cout << board[i][j];
            if(board[i][j] == 'W'){
                w++;
            }
            if(board[i][j] == 'B'){
                b++;
            }
        }
        cout << "\n";
    }
    if(w > b){
        cout << "white wins";
    }
    if(w < b){
        cout << "black wins";
    }
    if(w == b){
        cout << "draw";
    }
}