Submission
Status:
PPPPPPPPPPPPPPP-P-PP
Subtask/Task Score:
90/100
Score: 90
User: modx9572
Problemset: Othello
Language: cpp
Time: 0.003 second
Submitted On: 2025-11-06 21:22:32
#include <bits/stdc++.h>
using namespace std;
char arr[9][9];
void print(){
for(int i=0;i<8;i++){
for(int j=0;j<8;j++){
cout << arr[i][j];
}
cout << "\n";
}
}
void right(int a,int b,char c){
arr[a][b]=c;
int check=true;
char op;
if(c=='B'){
op='W';
}
else{
op='B';
}
if(arr[a][b+1]==op){
int leftmax=0;
for(int i=1;i+b<8;i++){
if(arr[a][i+b]=='_'){
check=false;
break;
}
if(arr[a][i+b]==c){
leftmax=i;
break;
}
}
if(check==true){
for(int i=1;i<leftmax;i++){
arr[a][i+b]=c;
}
}
}
}
void bottomright(int a,int b,char c){
arr[a][b]=c;
int check=true;
char op;
if(c=='B'){
op='W';
}
else{
op='B';
}
if(arr[a+1][b+1]==op){
int leftmax=0;
for(int i=1;i+b<8&&i+a<8;i++){
if(arr[i+a][i+b]=='_'){
check=false;
break;
}
if(arr[i+a][i+b]==c){
leftmax=i;
break;
}
}
if(check==true){
for(int i=1;i<leftmax;i++){
arr[i+a][i+b]=c;
}
}
}
}
void left(int a,int b,char c){
arr[a][b]=c;
bool check=true;
char op;
if(c=='B'){
op='W';
}
else{
op='B';
}
if(arr[a][b-1]==op){
int leftmax=0;
for(int i=1;b-i>=0;i++){
if(arr[a][b-i]=='_'){
check=false;
break;
}
if(arr[a][b-i]==c){
leftmax=i;
break;
}
}
if(check){
for(int i=1;i<leftmax;i++){
arr[a][b-i]=c;
}
}
}
}
void top(int a,int b,char c){
arr[a][b]=c;
bool check=true;
char op;
if(c=='B'){
op='W';
}
else{
op='B';
}
if(arr[a-1][b]==op){
int topmax=0;
for(int i=1;a-i>=0;i++){
if(arr[a-i][b]=='_'){
check=false;
break;
}
if(arr[a-i][b]==c){
topmax=i;
break;
}
}
if(check){
for(int i=1;i<topmax;i++){
arr[a-i][b]=c;
}
}
}
}
void bottom(int a,int b,char c){
arr[a][b]=c;
bool check=true;
char op;
if(c=='B'){
op='W';
}
else{
op='B';
}
if(arr[a+1][b]==op){
int bottommax=0;
for(int i=1;a+i<8;i++){
if(arr[a+i][b]=='_'){
check=false;
break;
}
if(arr[a+i][b]==c){
bottommax=i;
break;
}
}
if(check){
for(int i=1;i<bottommax;i++){
arr[a+i][b]=c;
}
}
}
}
void topleft(int a,int b,char c){
arr[a][b]=c;
bool check=true;
char op;
if(c=='B'){
op='W';
}
else{
op='B';
}
if(arr[a-1][b-1]==op){
int maxlen=0;
for(int i=1;a-i>=0 && b-i>=0;i++){
if(arr[a-i][b-i]=='_'){
check=false;
break;
}
if(arr[a-i][b-i]==c){
maxlen=i;
break;
}
}
if(check){
for(int i=1;i<maxlen;i++){
arr[a-i][b-i]=c;
}
}
}
}
void topright(int a,int b,char c){
arr[a][b]=c;
bool check=true;
char op;
if(c=='B'){
op='W';
}
else{
op='B';
}
if(arr[a-1][b+1]==op){
int maxlen=0;
for(int i=1;a-i>=0 && b+i<8;i++){
if(arr[a-i][b+i]=='_'){
check=false;
break;
}
if(arr[a-i][b+i]==c){
maxlen=i;
break;
}
}
if(check){
for(int i=1;i<maxlen;i++){
arr[a-i][b+i]=c;
}
}
}
}
void bottomleft(int a,int b,char c){
arr[a][b]=c;
char op;
bool check=true;
if(c=='B'){
op='W';
}
else{
op='B';
}
if(arr[a+1][b-1]==op){
int maxlen=0;
for(int i=1;a+i<8 && b-i>=0;i++){
if(arr[a+i][b-i]=='_'){
check=false;
break;
}
if(arr[a+i][b-i]==c){
maxlen=i;
break;
}
}
if(check){
for(int i=1;i<maxlen;i++){
arr[a+i][b-i]=c;
}
}
}
}
int main(){
for(int i=0;i<8;i++){
for(int j=0;j<8;j++){
cin >> arr[i][j];
}
}
int a, b;
char turn = 'B';
while(true){
cin >> a >> b;
if(a == -1 && b == -1) {
break;
}
if(arr[a][b]!='_'){
break;
}
right(a,b,turn);
left(a,b,turn);
top(a,b,turn);
bottom(a,b,turn);
topleft(a,b,turn);
topright(a,b,turn);
bottomleft(a,b,turn);
bottomright(a,b,turn);
if(turn =='B'){
turn ='W';
}
else{
turn='B';
}
}
print();
int black = 0, white = 0;
for(int i=0;i<8;i++){
for(int j=0;j<8;j++){
if(arr[i][j]=='B') black++;
else if(arr[i][j]=='W') white++;
}
}
if(black > white) cout << "black wins\n";
else if(white > black) cout << "white wins\n";
else cout << "draw\n";
}
/*
B__B__B_
_W_W_W__
__WWW___
BWW_WWWB
__WWW___
_W_W_W__
B__W__W_
___B___B
W__W__W_
_B_B_B__
__BBB___
WBB_BBBW
__BBB___
_B_B_B__
W__B__B_
___W___W
*/