Submission

Status:

PPPPPP-PPPPP-P----PP

Subtask/Task Score:

70/100

Score: 70

User: CiCiiAlWh

Problemset: Othello

Language: cpp

Time: 0.002 second

Submitted On: 2025-09-28 15:35:31

#include <bits/stdc++.h>
using namespace std;

string board[8];
bool black_play = true;
int r, c;

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

void result() {
	int b = 0;
	int w = 0;
	for(int i = 0; i < 8; ++i) {
		for (int j = 0; j < 8; ++j) {
			if (board[i][j] == 'W') ++w;
			else if (board[i][j] == 'B') ++b;
		}
	}
	if (b > w) {
		cout << "black wins";
	}
	else if (w > b) {
		cout << "white wins";
	}
	else {
		cout << "draw";
	}
	
}

void playing(char color) {
	// walk left to check
	for(int j = c-1; j >= 0; --j) {
		// if there is same color
		if (board[r][j] == color) {
			// walk back to right and replace
			for (int k = j; k <= c ; ++k) {
				board[r][k] = color;
			}
			break;
		}
		else if (board[r][j] == '_'){
			break;
		} 
	}
	
	// walk right to check
	for(int j = c+1; j <8; ++j) {
		// if there is same color
		if (board[r][j] == color) {
			// walk back to left and replace
			for (int k = j; k >= c ; --k) {
				board[r][k] = color;
			}
			break;
		} 
		else if (board[r][j] == '_'){
			break;
		} 
		
	}
	
	// walk up to check
	for(int i = r-1; i >= 0; --i) {
		// if there is same color
		if (board[i][c] == color) {
			// walk back to down and replace
			for (int k = i; k <= r ; ++k) {
				board[k][c] = color;
			}
			break;
		} 
		else if (board[i][c] == '_'){
			break;
		}
	}
	
	// walk down to check
	for(int i = r+1; i < 8; ++i) {
		// if there is same color
		if (board[i][c] == color) {
			// walk back to up and replace
			for (int k = i; k >= r ; --k) {
				board[k][c] = color;
			}
			break;
		} 
		else if (board[i][c] == '_'){
			break;
		}
	}
	
	// walk diagonal down right to check
	for(int q = 1; q < 8; ++q) {
		// if out of bound
		if (r+q > 7 || c+q > 7) break;
		// if there is same color
		if (board[r+q][c+q] == color) {
			// walk back to up left and replace
			for (int k = q; k >= 0 ; --k) {
				board[r+k][c+k] = color;
			}
			break;
		} 
		else if (board[r+q][c+q] == '_'){
			break;
		}
	}
	
	// walk diagonal up left to check
	for(int q = 1; q < 8; ++q) {
		// if out of bound
		if (r-q < 0 || c-q < 0) break;
		// if there is same color
		if (board[r-q][c-q] == color) {
			// walk back to down right and replace
			for (int k = q; k >= 0 ; --k) {
				board[r-k][c-k] = color;
			}
			break;
		} 
		else if (board[r-q][c-q] == '_'){
			break;
		}
	}
	
	// walk diagonal up right to check
	for(int q = 1; q < 8; ++q) {
		// if out of bound
		if (r-q < 0 || c+q > 7) break;
		// if there is same color
		if (board[r-q][c+q] == color) {
			// walk back to down right and replace
			for (int k = q; k >= 0 ; --k) {
				board[r-k][c+k] = color;
			}
			break;
		} 
		else if (board[r-q][c+q] == '_'){
			break;
		}
	}
	
	// walk diagonal down left to check
	for(int q = 1; q < 8; ++q) {
		// if out of bound
		if (r+q > 7 || c-q < 0) break;
		// if there is same color
		if (board[r+q][c-q] == color) {
			// walk back to up right and replace
			for (int k = q; k >= 0 ; --k) {
				board[r+k][c-k] = color;
			}
			break;
		} 
		else if (board[r+q][c-q] == '_'){
			break;
		}
	}
}

int main() {
	
	for(int i = 0; i < 8; ++i) {
		cin >> board[i];
	}
	int ct = 0;
	for(int i = 0; i < 8; ++i) {
		for (int j = 0; j < 8; ++j) {
			if (board[i][j] == '_') ++ct;
		}
	}
	
	while (ct > 0) {
		--ct;
		cin >> r >> c;
		if (r == -1 && c == -1) break;
		if (black_play) {
			board[r][c] = 'B';
			playing('B');
		}
		else {
			board[r][c] = 'W';
			playing('W');
		}
		
		black_play = !black_play;
	}
	
	show_board();
	result();
}