Submission

Status:

PPPPPP-PPPPP-P----PP

Subtask/Task Score:

70/100

Score: 70

User: lingusso

Problemset: Othello

Language: cpp

Time: 0.002 second

Submitted On: 2026-04-29 12:35:10

#include<iostream>
#include<string>
#include<vector>

using namespace std;
vector<string> v;
void fl(int y,int x,char c){
	int b=-1;
	for(int i=x+1;i>-2;i++){
		if(i>7){
			break;
		}
		if(v[y][i] == c){
			 b=i;
			 break;
		}
		else if(v[y][i] == '_'){
			break;
		}
	}
	if(b==-1){
		return ;
	}
	else{
		for(int i=x;i<=b;i++){
			v[y][i]=c;
		}
	}
}
void fr(int y,int x,char c){
	int b=-1;
	for(int i=x-1;i>-2;i--){
		if(i<0){
			break;
		}
		if(v[y][i] == c){
			 b=i;
			 break;
		}
		else if(v[y][i] == '_'){
			break;
		}
	}
	if(b==-1){
		return ;
	}
	else{
		for(int i=x;i>=b;i--){
			v[y][i]=c;
		}
	}
}
void fu(int y,int x,char c){
	int b=-1;
	for(int i=y-1;i>-2;i--){
		if(i<0){
			break;
		}
		if(v[i][x] == c){
			 b=i;
			 break;
		}
		else if(v[i][x] == '_'){
			break;
		}
	}
	if(b==-1){
		return ;
	}
	else{
		for(int i=y;i>=b;i--){
			v[i][x]=c;
		}
	}
}
void fd(int y,int x,char c){
	int b=-1;
	for(int i=y+1;i>-2;i++){
		if(i>7){
			break;
		}
		if(v[i][x] == c){
			 b=i;
			 break;
		}
		else if(v[i][x] == '_'){
			break;
		}
	}
	if(b==-1){
		return ;
	}
	else{
		for(int i=y;i<=b;i++){
			v[i][x]=c;
		}
	}
}
void fdl(int y,int x,char c){
	int b=-1;
	for(int i=x+1;i>-2;i++){
		if(i>7 || y+i-x>7){
			break;
		}
		if(v[y+i-x][i] == c){
			 b=i;
			 break;
		}
		else if(v[y+i-x][i] == '_'){
			break;
		}
	}
	if(b==-1){
		return ;
	}
	else{
		for(int i=x;i<=b;i++){
			v[y+i-x][i]=c;
		}
	}
}
void fur(int y,int x,char c){
	int b=-1;
	for(int i=x-1;i>-2;i--){
		if(i<0 || y+i-x<0){
			break;
		}
		if(v[y+i-x][i] == c){
			 b=i;
			 break;
		}
		else if(v[y+i-x][i] == '_'){
			break;
		}
	}
	if(b==-1){
		return ;
	}
	else{
		for(int i=x;i>=b;i--){
			v[y+i-x][i]=c;
		}
	}
}
void ful(int y,int x,char c){
	int b=-1;
	for(int i=1;i>-2;i++){
		if(y-i<0 || x+i>7){
			break;
		}
		if(v[y-i][x+i] == c){
			 b=i;
			 break;
		}
		else if(v[y-i][x+i] == '_'){
			break;
		}
	}
	if(b==-1){
		
		return ;
	}
	else{
		for(int i=1;i<=b;i++){
			v[y-i][x+i]=c;
		}
	}
}
void fdr(int y,int x,char c){
	int b=-1;
	for(int i=1;i>-2;i++){
		if(y+i>7 || x-i<0){
			break;
		}
		if(v[y+i][x-i] == c){
			 b=i;
			 break;
		}
		else if(v[y+i][x-i] == '_'){
			break;
		}
	}
	if(b==-1){
		
		return ;
	}
	else{
		for(int i=1;i<=b;i++){
			v[y+i][x-i]=c;
		}
	}
}
int main(){
	int x,y,c=0,b=0,w=0;
	string a;
	
	for(int i=0;i<8;i++){
		cin>>a;
		v.push_back(a);
	}
	//place mark
	while(true){
		cin>>y>>x;
		if(y==-1||x==-1){
			for(int i=0;i<8;i++){
				cout<<v[i]<<"\n";
			}
			for(int i=0;i<8;i++){
				for(int j=0;j<8;j++){
					if(v[i][j]=='W'){
						w++;
					}
					if(v[i][j]=='B'){
						b++;
					}
				}
			}
			if(w>b){
				cout<<"white wins";
			}
			else if(b>w){
				cout<<"black wins";
			}
			else{
				cout<<"draw";
			}
			return 0;
		}
		if(c%2==0){
			v[y][x] = 'B';
		}
		else{
			v[y][x] = 'W';
		}
		c++;
		fl(y,x,v[y][x]);
		fr(y,x,v[y][x]);
		fu(y,x,v[y][x]);
		fd(y,x,v[y][x]);
		fdl(y,x,v[y][x]);
		fur(y,x,v[y][x]);
		ful(y,x,v[y][x]);
		fdr(y,x,v[y][x]);
	}
}