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();
}