Submission
Status:
PPPPPPPPPPPPPPP-P-PP
Subtask/Task Score:
90/100
Score: 90
User: bananakung
Problemset: Othello
Language: cpp
Time: 0.004 second
Submitted On: 2026-10-15 15:29:47
#include<iostream>
#include<string>
#include<vector>
using namespace std;
void right(char turn,int r, int c ,vector<string> &st)
{
for(int j=c+1;j<8;j++)
{
if(st[r][j]=='_') break;
if(st[r][j]==turn)
{
for(int k=c+1 ;k<j;k++) st[r][k]=turn;
break;
}
}
}
void left(char turn,int r, int c ,vector<string> &st)
{
// cout<<"bb";
for(int j=c-1;j>=0;j--)
{
if(st[r][j]=='_') break;
if(st[r][j]==turn)
{
// cout<<"line 27";
for(int k=c-1 ;k>j;k--) st[r][k]=turn;
break;
}
}
}
void up(char turn,int r, int c ,vector<string> &st)
{
// cout<<"bb";
for(int i=r-1;i>=0;i--)
{
if(st[i][c]=='_') break;
if(st[i][c]==turn)
{
// cout<<"line 27";
for(int k=r-1 ;k>i;k--) st[k][c]=turn;
break;
}
}
}
void down(char turn,int r, int c ,vector<string> &st)
{
// cout<<"bb";
for(int i=r+1;i<8;i++)
{
if(st[i][c]=='_') break;
if(st[i][c]==turn)
{
// cout<<"line 27";
for(int k=r+1 ;k<i;k++) st[k][c]=turn;
break;
}
}
}
void up_left_down(char turn,int r,int c,vector<string> &st)
{
//
// cout<<"bb";
for(int i=1;i+r<8 && i+c<8;i++)
{
// cout<<r+i <<" "<<c+i<<endl;
if(st[r+i][c+i]=='_') break;
if(st[r+i][c+i]==turn)
{
// cout<<"line 27";
for(int k=1 ;k<i;k++) st[r+k][c+k]=turn;
break;
}
}
}
void down_right_up(char turn,int r,int c,vector<string> &st)
{
for(int i=1;r-i>=0 && c-i>=0 ;i++)
{
// cout<<r-i <<" "<<c-i<<endl;
if(st[r-i][c-i]=='_') break;
if(st[r-i][c-i]==turn)
{
for(int k=1 ; k<i;k++) st[r-k][c-k]=turn;
break;
}
}
}
void up_right_down(char turn,int r,int c,vector<string> &st)
{
for(int i=1;r-i>=0 && c+i<8 ;i++)
{
// cout<<r-i <<" "<<c-i<<endl;
if(st[r-i][c+i]=='_') break;
if(st[r-i][c+i]==turn)
{
for(int k=1 ; k<i;k++) st[r-k][c+k]=turn;
break;
}
}
}
void down_left_up(char turn,int r,int c,vector<string> &st)
{
for(int i=1;r+i<8 && c-i>=0 ;i++)
{
// cout<<r-i <<" "<<c-i<<endl;
if(st[r+i][c-i]=='_') break;
if(st[r+i][c-i]==turn)
{
for(int k=1 ; k<i;k++) st[r+k][c-k]=turn;
break;
}
}
}
void place(char turn,int r,int c,vector<string> &st)
{
st[r][c]=turn;
right(turn,r,c,st);
left(turn,r,c,st);
up(turn,r,c,st);
down(turn,r,c,st);
down_right_up(turn,r,c,st);
up_left_down(turn,r,c,st);
down_left_up(turn,r,c,st);
up_right_down(turn,r,c,st);
}
int main()
{
vector<string> st;
for(int i=0;i<8;i++)
{
string str;
cin>>str;
st.push_back(str);
}
int r,c;
while(true)
{
//turn 1
cin>>r>>c;
if(r==-1 || c==-1) break;
if(st[r][c]=='_') place('B',r,c,st);
//trun 2
cin>>r>>c;
if(r==-1 || c==-1) break;
if(st[r][c]=='_') place('W',r,c,st);
}
int ctb=0,ctw=0;
for(string i:st)
{
cout<<i<<endl;
for(int j=0;j<i.size();j++)
{
if(i[j]=='B') ctb++;
if(i[j]=='W') ctw++;
}
}
if(ctb>ctw) cout<<"black wins";
else if(ctw>ctb) cout<<"white wins";
else cout<<"draw";
/*testcase
________
________
________
__WWWWB_
________
________
________
________
3 2
________
________
________
__BW____
________
________
________
________
3 4
________
________
________
__BWW__B
________
________
________
________
3 5
W
________
________
________
___BBBW_
________
________
________
________
3 2
________
________
___WWWB_
___BBBW_
________
________
________
________
2 2
3 2
________
________
___WWWB_
___BBBW_
________
________
________
________
1 3
1 6
________
________
___WWWB_
___BBBW_
________
________
________
________
1 6
4 6
________
________
___W_WB_
___BBBW_
______W_
________
________
________
1 6
2 4
1 change 3,2 to B
2 ดูตัวข้างๆ
ถ้าเป็น wเช็คต่อ
ถ้า เป็น _ เลิกดู
ถ้าเป็น B เหมือนเดิมเปลี่ยน ตรงกลางให้เป็น B ด้วย
*/
}