Submission

Status:

PPPPPP-PPPPP-P----PP

Subtask/Task Score:

70/100

Score: 70

User: NealonX90

Problemset: Othello

Language: cpp

Time: 0.004 second

Submitted On: 2026-10-05 22:38:29

#include <bits/stdc++.h>
using namespace std;
vector<vector<char>> tbuse(8,vector<char>(8,'_'));
int bp = 0;
int wp = 0;
bool turn = false;
void righthelper(int x , int y) {
    for (int i = x + 1 ; i < 8 ; i ++) {
        if (tbuse[y][i] == '_') break;
        //cout << "Search Right " << i << " : " << '\n';
        if (turn && tbuse[y][i] == 'W') {
            //cout << "Found WL";
            for (int idx = x + 1 ; idx < i ; idx++) {
                tbuse[y][idx] = 'W';
            }
            break;
        } else if (!turn && tbuse[y][i] == 'B') {
            //cout << "Found BL";
            for (int idx = x + 1 ; idx < i ; idx++) {
                tbuse[y][idx] = 'B';
            }
            break;
        }
    }
}
void lefthelper(int x , int y) {
    for (int i = x - 1 ; i >= 0 ; i--) {
        if (tbuse[y][i] == '_') break;
        //cout << "Search Left " << i << " : " << '\n';
        if (turn && tbuse[y][i] == 'W') {
            //cout << "Found WR";
            for (int idx = x - 1 ; idx > i ; idx--) {
                tbuse[y][idx] = 'W';
            }
            break;
        } else if (!turn && tbuse[y][i] == 'B') {
            //cout << "Found B";
            for (int idx = x - 1 ; idx > i ; idx--) {
                tbuse[y][idx] = 'B';
            }
            break;
        }
        //cout << i << '\n';
    }
}
void uphelper(int x , int y) {
    for (int i = y - 1 ; i >= 0 ; i--) {
        if (tbuse[i][x] == '_') break;
        //cout << "Search Left " << i << " : " << '\n';
        if (turn && tbuse[i][x] == 'W') {
            
            //cout << "Found WR";
            for (int idx = y - 1 ; idx > i ; idx--) {
                tbuse[idx][x] = 'W';
            }
            break;
        } else if (!turn && tbuse[i][x] == 'B') {
            
            for (int idx = y - 1 ; idx > i ; idx--) {
                tbuse[idx][x] = 'B';
            }
            break;
        }
        //cout << i << '\n';
    }
}
void downhelper(int x , int y) {
    for (int i = y + 1 ; i < 8 ; i++) {
        if (tbuse[i][x] == '_') break;
        //cout << "Search Left " << i << " : " << '\n';
        if (turn && tbuse[i][x] == 'W') {
            //cout << "Found WR";
            
            for (int idx = y + 1 ; idx < i ; idx++) {
                tbuse[idx][x] = 'W';
            }
            break;
        } else if (!turn && tbuse[i][x] == 'B') {
            //cout << "Found B";
            for (int idx = y + 1 ; idx < i ; idx++) {
                tbuse[idx][x] = 'B';
            }
            break;
        }
        //cout << i << '\n';
    }
}

void rdhelper(int x , int y) {
    
    for (int i = 1 ; y + i < 8 && x + i < 8 ; i++) {
        if (tbuse[y+i][x+i] == '_') break;
        if (turn && tbuse[y+i][x+i] == 'W') {
            for (int idx = 1 ; idx < i ; idx++) {
                tbuse[y+idx][x+idx] = 'W';
            }
            break;
        } else if (!turn && tbuse[y+i][x+i] == 'B') {
            for (int idx = 1 ; idx < i ; idx++) {
                tbuse[y+idx][x+idx] = 'B';
            }
            break;
        }
        
    }
}
void ldhelper(int x , int y) {
    for (int i = 1 ; y + i < 8 && x - i >= 0 ; i++) {
        if (tbuse[y+i][x-i] == '_') break;
        if (turn && tbuse[y+i][x-i] == 'W') {
            for (int idx = 1 ; idx < i ; idx++) {
                tbuse[y+idx][x-idx] = 'W';
            }
            break;
        } else if (!turn && tbuse[y+i][x-i] == 'B') {
            for (int idx = 1 ; idx < i ; idx++) {
                tbuse[y+idx][x-idx] = 'B';
            }
            break;
        }
        
    }
}
void ulhelper(int x , int y) {
    for (int i = 1 ; y - i >= 0 && x + i < 8 ; i++) {
        if (tbuse[y-i][x+i] == '_') break;
        if (turn && tbuse[y-i][x+i] == 'W') {
            for (int idx = 1 ; idx < i ; idx++) {
                tbuse[y-idx][x+idx] = 'W';
            }
            break;
        } else if (!turn && tbuse[y-i][x+i] == 'B') {
            for (int idx = 1 ; idx < i ; idx++) {
                tbuse[y-idx][x+idx] = 'B';
            }
            break;
        }
        
    }
}
void urhelper(int x , int y) {
    for (int i = 1 ; y - i >= 0 && x - i >= 0 ; i++) {
        if (tbuse[y-i][x-i] == '_') break;
        if (turn && tbuse[y-i][x-i] == 'W') {
            for (int idx = 1 ; idx < i ; idx++) {
                tbuse[y-idx][x-idx] = 'W';
            }
            break;
        } else if (!turn && tbuse[y-i][x-i] == 'B') {
            for (int idx = 1 ; idx < i ; idx++) {
                
                tbuse[y-idx][x-idx] = 'B';
            }
            break;
        }
        
    }
}
int main() {
    cin.tie(0)->sync_with_stdio(0);
    for (int i = 0 ; i < 8  ; i++) {
        string col;cin >> col;
        for (int j = 0 ; j < 8 ; j++) {
            
            tbuse[i][j] = col[j];
        }
    }
    
    while (1) {
        int x , y;cin >> y >> x;
        if (x == -1 || y == -1) break;
        //cout << "now " << x << ' ' << y << '\n';
        tbuse[y][x] = turn ? 'W' : 'B';
        lefthelper(x,y);
        righthelper(x,y);
        downhelper(x,y);
        uphelper(x,y);
        rdhelper(x,y);
        ldhelper(x,y);
        ulhelper(x,y);
        urhelper(x,y);
        turn = !turn;
    }
    for (auto rows : tbuse) {
        for (auto cols : rows) {
            if (cols == 'B') bp += 1;
            else if (cols == 'W') wp += 1;
            cout << cols;
        }
        cout << '\n';
    }
    if (bp > wp) cout << "black wins";
    else if (wp > bp) cout << "white wins";
    else cout << "draw";
}

// _W_WBB__ 
// WWW__B__ 
// WW_WB_BB 
// W_WBW_WB 
// _BB_W_WB 
// _BBWW__W 
// _B_B_B__ 

// _W_BBB__
// WWWB_B__
// WW_BB_BB
// W_WBW_WB
// _BB_W_WB
// _BBWW__W
// _B_B_B__