Submission

Status:

PPPPPP-PPPPP-P----PP

Subtask/Task Score:

70/100

Score: 70

User: modx9572

Problemset: Othello

Language: cpp

Time: 0.002 second

Submitted On: 2025-10-10 19:23:15

#include <bits/stdc++.h>
using namespace std;
char arr[8][8];
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 = (c=='B') ? 'W' : '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 = (c=='B') ? 'W' : '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;
    bool check=true;
    char op = (c=='B') ? 'W' : '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;
	    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);
	    turn = (turn == 'B') ? 'W' : '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
*/