Submission

Status:

PPPPPPPPPPPPPPP-P-PP

Subtask/Task Score:

90/100

Score: 90

User: dddrrrr

Problemset: Othello

Language: cpp

Time: 0.002 second

Submitted On: 2025-10-16 11:50:01

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

int dx[8] = {0 , 0 ,1 ,-1 ,1 ,1 ,-1 ,-1} ,dy[8] = {1 ,-1 ,0 ,0 ,1 ,-1 ,1 ,-1};

void convert(int dir ,vector <vector <char>>& vec ,int i ,int j ,char c){
	
	i+=dx[dir];
	j+=dy[dir];
	while(vec[i][j] != c && i < 8 && j < 8 && i >= 0 && j >= 0){
		vec[i][j] = c;
		i+=dx[dir];
		j+=dy[dir];
	}
	
	return ;
}

void solve(int i ,int j ,vector <vector <char>>& vec ,char c){
	//if(i == 8 || j == 8 || i < 0 || j < 0)return -1;
	//if(x == vec[i][j])return ;
	int sx = i ,sy = j;
	for(int k=0 ;k<8 ;k++){
		i = sx;
		j = sy;
		bool op = false;
		
		while(true){
			i += dx[k];
			j += dy[k];
			if(i == 8 || j == 8 || i < 0 || j < 0  || vec[i][j] == '_')break;
		
			if(vec[i][j] == c){
				if(op)convert(k ,vec ,sx ,sy ,c);
				break ;
			}
			else{
				op = true;
			}
		}
	}
	return ;
}

bool isvalid(vector <vector <char>>& vec){
	for(auto row : vec){
		for(auto col : row){
			if(col == '_')return true;
		}
	}
	return false;
}

int main(){
	cin.tie(0)->sync_with_stdio(0);
	vector <vector <char>> vec(8 ,vector <char>(8));
	for(auto& row : vec){
		for(auto& col : row){
			cin >> col;
		}
	}
	
	bool b=true;
	while(true){
		int x ,y;
		cin >> x >> y;
		
		if(x==-1 && y==-1)break;
		if(vec[x][y] != '_')break; 
		
		if(b){
			vec[x][y] = 'B';
			b=false;
		}
		else{
			vec[x][y] = 'W';
			b=true;
		}
		solve(x ,y ,vec ,vec[x][y]);
		if(!isvalid(vec))break;
	}
	
	int black=0 ,white=0;
	for(auto row : vec){
		for(auto col : row){
			cout << col;
			if(col == 'B')black++;
			else if(col == 'W')white++;
		}
		cout << "\n";
	}
	
	if(black > white)cout << "black wins";
	else if(black < white)cout << "white wins";
	else cout << "draw";
	
	return 0;
	
}