Submission

Status:

PPPPPPPPPPPPPPP-P-PP

Subtask/Task Score:

90/100

Score: 90

User: bananakung

Problemset: Othello

Language: cpp

Time: 0.002 second

Submitted On: 2026-10-15 19:47:22

#include<iostream>
#include<string>
#include<vector>
using namespace std;

bool hasEmpty(const vector<string>& st)
{
    for (const auto& row : st)
        if (row.find('_') != string::npos) return true;
    return false;
}

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
        bool find=false;
        // for(auto i : st)
        // {
            
        //     if(i.find('_') != std::string::npos)
        //     {
        //         find=true;
        //         break;
        //     }
        // }
        cin>>r>>c;
    //    if(find == false) break;

        if(r==-1 || c==-1) break;
        if (!hasEmpty(st)) break;
        if(st[r][c]=='_')  place('B',r,c,st);
         
        //trun 2
        // bool find=false;
        // for(auto i : st)
        // {
        //     if(i.find('_') != std::string::npos)
        //     {
        //         bool find=true;
        //         break;
        //     }
        // }
        cin>>r>>c;
        if(r==-1 || c==-1) break;
        if (!hasEmpty(st)) break;
     //   if(find == false) 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 ด้วย
    */
}