Submission

Status:

PPPPPP-PPPPP-P----PP

Subtask/Task Score:

70/100

Score: 70

User: Prap

Problemset: Othello

Language: cpp

Time: 0.003 second

Submitted On: 2026-04-29 13:44:39

#include <iostream>
#include <cmath>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector <string> table;
int xcoord, ycoord;
void check(int whoturn) {
	char oppoplace = 'W';
	char whoplace = 'B';
	if (whoturn%2==1) {
		whoplace = 'W';
		oppoplace = 'B';
	}
	int C_max = ycoord;
	int C_min = xcoord;
	if (xcoord > ycoord) {
		C_max = xcoord;
		C_min = ycoord;
	}
	//up
	if (ycoord > 1) {
		for (int i = ycoord-1; i>=0 ; i--) {
			if (table[i][xcoord] == whoplace && table[i+1][xcoord] == oppoplace && table[ycoord-1][xcoord] == oppoplace) {
				for (int j = i+1; j<ycoord; j++) {
					table[j][xcoord] = whoplace;
				}
				break;
			}
			else if (table[i][xcoord] == oppoplace) {
				
			}
			else if (table[i][xcoord] == '_') {
				break;
			}
		}
	}
	//down
	if (ycoord < 6) {
		for (int i = ycoord+1; i<8; i++) {
			if (table[i][xcoord] == whoplace && table[i-1][xcoord] == oppoplace && table[ycoord+1][xcoord] == oppoplace) {
				for (int j = i-1; j>ycoord; j--) {
					table[j][xcoord] = whoplace;
				}
				i = 9;
			}
			else if (table[i][xcoord] == oppoplace) {
				
			}
			else if (table[i][xcoord] == '_') {
				i = 9;
			}
		}
	}
	//left
	if (xcoord > 2) {
		for (int i = xcoord-1; i>=0 ; i--) {
			if (table[ycoord][i] == whoplace && table[ycoord][i+1] == oppoplace && table[ycoord][xcoord-1] == oppoplace) {
				for (int j = i+1; j<xcoord; j++) {
					table[ycoord][j] = whoplace;
				}
				i = -1;
			}
			else if (table[ycoord][i] == oppoplace) {
				
			}
			else if (table[ycoord][i] == '_') {
				i = -1;
			}
		}
	}
	//right
	if (xcoord < 6) {
		for (int i = xcoord+1; i<8; i++) {
			if (table[ycoord][i] == whoplace && table[ycoord][i-1] == oppoplace && table[ycoord][xcoord+1] == oppoplace) {
				for (int j = i-1; j>xcoord; j--) {
					table[ycoord][j] = whoplace;
				}
				i = 9;
			}
			else if (table[ycoord][i] == oppoplace) {
				
			}
			else if (table[ycoord][i] == '_') {
				i = 9;
			}
		}
	}
	//right down
	if (xcoord < 6 && ycoord < 6) {
		for (int i = 1; i+C_max<8 ; i++) {
			if (table[ycoord+i][xcoord+i] == whoplace && table[ycoord+i-1][xcoord+i-1] == oppoplace && table[ycoord+1][xcoord+1] == oppoplace) {
				for (int j = i-1; j>0; j--) {
					table[ycoord+j][xcoord+j] = whoplace;
				}
				break;
			}
			else if (table[ycoord+i][xcoord+i] == oppoplace) {
				
			}
			else if (table[ycoord+i][xcoord+i] == '_') {
				break;
			}
		}
	}
	//left up
	if (xcoord > 1 && ycoord > 1) { 
		for (int i = 1; i<=C_min ; i++) {
			if (table[ycoord-i][xcoord-i] == whoplace && table[ycoord-i+1][xcoord-i+1] == oppoplace && table[ycoord-1][xcoord-1] == oppoplace) {
				for (int j = 1; j<i; j++) {
					table[ycoord-i+j][xcoord-i+j] = whoplace;
				}
				break;
			}
			else if (table[ycoord-i][xcoord-i] == oppoplace) {
				
			}
			else if (table[ycoord-i][xcoord-i] == '_') {
				break;
			}
		}
	}
	//left down
	if (xcoord > 1 && ycoord < 6) 
	for (int i = 1; ycoord + i <=7 && xcoord - i >=0; i++) {
		if (table[ycoord+i][xcoord-i] == whoplace && table[ycoord+i-1][xcoord+i+1] == oppoplace && table[ycoord+1][xcoord-1] == oppoplace) {
			for (int j = 1; j<i; j++) {
				table[ycoord+j][xcoord-j] = whoplace;
			}
			break;
		}
		else if (table[ycoord+i][xcoord-i] == oppoplace) {
			
		}
		else if (table[ycoord+i][xcoord-i] == '_') {
			break;
		}
	}
	// right up
	if (xcoord < 6 && ycoord > 1) {
		for (int i = 1; xcoord + i <=7 && ycoord - i >=0; i++) {
			if (table[ycoord-i][xcoord+i] == whoplace  && table[ycoord-1][xcoord+1] == oppoplace && table[ycoord-1][xcoord+1] == oppoplace) {
				for (int j = 1; j<i; j++) {
					table[ycoord-j][xcoord+j] = whoplace;
				}
				break;
			}
			else if (table[ycoord-i][xcoord+i] == oppoplace) {
				
			}
			else if (table[ycoord-i][xcoord+i] == '_') {
				break;
			}
		}
	}
	return ;
}
int main() {
	string word;
	for (int i = 0; i<8; i++) {
		cin>>word;
		table.push_back(word);
	}
	bool cont = true;
	int turn = 0;
	//even black odd white
	while (cont) {
		cin>>ycoord>>xcoord;
		if (xcoord == -1 && ycoord == -1) {
			cont = false;
		}
		else {
			if (turn%2==0) {
				table[ycoord][xcoord] = 'B';
			}
			else {
				table[ycoord][xcoord] = 'W';
			}
			check(turn%2);
		}
		turn++;
		int spacesc = 0;
		for (int i = 0; i<8; i++) {
			for (int j = 0; j<8; j++) {
				if (table[i][j] == '_') {
					spacesc++;
				}
			}
		}
		if (spacesc == 0) {
			cont = false;
			/*70 --> 60*/
		}
	}
	int Wsc = 0, Bsc = 0;
	for (int i = 0; i<8; i++) {
		for (int j = 0; j<8; j++) {
			cout<<table[i][j];
			if (table[i][j] == 'B') {
				Bsc++;
			}
			else if (table[i][j] == 'W') {
				Wsc++;
			}
		}
		cout<<"\n";
	}
	if (Wsc > Bsc) {
		cout<<"white wins";
	}
	else if (Bsc > Wsc) {
		cout<<"black wins";
	}
	else {
		cout<<"draw"; /* 70 --> 65*/
	}
	return 0;
}