Files
OI-source/2.220.cpp
2023-08-03 09:22:52 +08:00

188 lines
2.6 KiB
C++

#include<iostream>
#include<vector>
#include<utility>
#include<cstring>
using namespace std;
#define non 0
#define black 1
#define white -1
int mp[10][10],tmp[10][10];
vector<pair<int,int> > cmd;
bool flag=0;
void print()
{
for(int i=1;i<=8;i++)
{
for(int j=1;j<=8;j++)
switch(mp[i][j])
{
case non:
putchar('-');
break;
case black:
putchar('B');
break;
case white:
putchar('W');
break;
}
putchar('\n');
}
}
int dx[]={+0,+1,+1,+1,+0,-1,-1,-1};
int dy[]={-1,-1,+0,+1,+1,+1,+0,-1};
bool put(int x,int y,int id,int st)
{
int i,k,j;
for(i=1;i<=8;i++)
for(j=1;j<=8;j++)
tmp[i][j]=mp[i][j];
if(tmp[y][x]) return 0;
bool flag=0;
for(i=0;i<8;i++)
{
for(k=1;x+dx[i]*k>=1&&x+dx[i]*k<=8&&y+dy[i]*k>=1&&y+dy[i]*k<=8&&tmp[y+dy[i]*k][x+dx[i]*k]==-id;k++);
if(tmp[y+dy[i]*k][x+dx[i]*k]==id&&k>=2)
{
flag=1;
for(j=1;j<k;j++)
tmp[y+dy[i]*j][x+dx[i]*j]=id;
tmp[y][x]=id;
}
}
if(st)
for(i=1;i<=8;i++)
for(j=1;j<=8;j++)
mp[i][j]=tmp[i][j];
return flag;
}
void solve()
{
if(flag) printf("\n");
flag=1;
char t;
int a,b,bl,wh;
for(int i=1;i<=8;i++)
for(int j=1;j<=8;j++)
{
cin>>t;
switch(t)
{
case '-':
mp[i][j]=0;
break;
case 'B':
mp[i][j]=black;
break;
case 'W':
mp[i][j]=white;
break;
}
}
int now;
cin>>t;
if(t=='W') now=white;
else now=black;
while(1)
{
cin>>t;
if(t=='Q')
{
print();
return;
}
if(t=='L')
{
cmd.clear();
for(int i=1;i<=8;i++)
for(int j=1;j<=8;j++)
if(put(j,i,now,0)) cmd.push_back(make_pair(i,j));
if(cmd.empty()) printf("No legal move.");
else for(int i=0;i<cmd.size();i++)
{
if(i) printf(" ");
printf("(%d,%d)",cmd[i].first,cmd[i].second);
}
printf("\n");
}
else
{
a=getchar()-'0';
b=getchar()-'0';
if(!put(b,a,now,1)) put(b,a,now=-now,1);
now=-now;
bl=wh=0;
for(int i=1;i<=8;i++)
for(int j=1;j<=8;j++)
if(mp[i][j]==black) bl++;
else if(mp[i][j]==white) wh++;
printf("Black - %2d White - %2d\n",bl,wh);
}
}
}
int main()
{
// freopen("pro.in","r",stdin);
int n;
cin>>n;
while(n-->0)
{
memset(mp,0,sizeof(mp));
solve();
}
return 0;
}
/*
Sample Input
2
--------
--------
--------
---WB---
---BW---
--------
--------
--------
W
L
M35
L
Q
WWWWB---
WWWB----
WWB-----
WB------
--------
--------
--------
--------
B
L
M25
L
Q
Sample Output
(3,5) (4,6) (5,3) (6,4)
Black - 1 White - 4
(3,4) (3,6) (5,6)
--------
--------
----W---
---WW---
---BW---
--------
--------
--------
No legal move.
Black - 3 White - 12
(3,5)
WWWWB---
WWWWW---
WWB-----
WB------
--------
--------
--------
--------
*/