没想到AC了好感动啊。。。
前面的那道象棋蜜汁WA把我搞的身心俱疲,又见到一个和棋有关的题就怂了啊
本来觉得会和象棋那题一样蜜汁WA的说,结果提交的时候看到presentation error整个心是紧了一下好吗!!简直是初恋的感觉啊!!
我的做法是把棋盘上的每个点都定义两个值来判断是否为黑子或者白子可落点,然后每个可落点都有一系列关联点,用于之后落子时将改点和关联点之间的棋子全部覆盖为同色。
结果这题输出及其坑爹。。。
输出注意:
1、打印有效点的时候每个点之间都有空格,但是最后一个点后面不能有
2、每个回合之间有空行(这个想必大家都会注意到)
3、输出黑白棋子各自剩余多少时,应该按照Black - xx White - yy这样的格式输出,就是要注意输出长度
自己没有仔细看题的习惯呢。。
下面是代码,那些用5000bytes就能解决的人好厉害啊。。。
#include
#include
#include
using namespace std;
struct point{
int r;
int c;
};
struct unit{
bool b_legal,w_legal;
point correlation[1000];
int c_n;
int type;//1:black 2:white
};
unit bot[15][15];
void up(int type,int r,int c){
int t=r-1;
if(r-1>=1){
r--;
while(bot[r][c].type==type){
r--;
}
if(t!=r){
if(type==1){bot[r][c].w_legal=1;}else{bot[r][c].b_legal=1;}
bot[r][c].correlation[bot[r][c].c_n].r=t+1;
bot[r][c].correlation[bot[r][c].c_n].c=c;
bot[r][c].c_n++;
}
}
}
void down(int type,int r,int c){
int t=r+1;
if(r+1<9){
r++;
while(bot[r][c].type==type){
r++;
}
if(t!=r){
if(type==1){bot[r][c].w_legal=1;}else{bot[r][c].b_legal=1;}
bot[r][c].correlation[bot[r][c].c_n].r=t-1;
bot[r][c].correlation[bot[r][c].c_n].c=c;
bot[r][c].c_n++;
}
}
}
void left(int type,int r,int c){
int t=c-1;
if(c-1>=1){
c--;
while(bot[r][c].type==type){
c--;
}
if(t!=c){
if(type==1){bot[r][c].w_legal=1;}else{bot[r][c].b_legal=1;}
bot[r][c].correlation[bot[r][c].c_n].r=r;
bot[r][c].correlation[bot[r][c].c_n].c=t+1;
bot[r][c].c_n++;
}
}
}
void right(int type,int r,int c){
int t=c+1;
if(c+1<9){
c++;
while(bot[r][c].type==type){
c++;
}
if(t!=c){
if(type==1){bot[r][c].w_legal=1;}else{bot[r][c].b_legal=1;}
bot[r][c].correlation[bot[r][c].c_n].r=r;
bot[r][c].correlation[bot[r][c].c_n].c=t-1;
bot[r][c].c_n++;
}
}
}
void left_up(int type,int r,int c){
int rt=r-1,ct=c-1;
if(rt-1>=1&&ct-1>=1){
r--,c--;
while(bot[r][c].type==type){
r--,c--;
}
if((rt!=r||ct!=c)){
if(type==1){bot[r][c].w_legal=1;}else{bot[r][c].b_legal=1;}
bot[r][c].correlation[bot[r][c].c_n].r=rt+1;
bot[r][c].correlation[bot[r][c].c_n].c=ct+1;
bot[r][c].c_n++;
}
}
}
void right_up(int type,int r,int c){
int rt=r-1,ct=c+1;
if(r-1>=1&&c+1<9){
r--,c++;
while(bot[r][c].type==type){
r--,c++;
}
if((rt!=r||ct!=c)){
if(type==1){bot[r][c].w_legal=1;}else{bot[r][c].b_legal=1;}
bot[r][c].correlation[bot[r][c].c_n].r=rt+1;
bot[r][c].correlation[bot[r][c].c_n].c=ct-1;
bot[r][c].c_n++;
}
}
}
void left_down(int type,int r,int c){
int rt=r+1,ct=c-1;
if(r+1<9&&c-1>=1){
r++,c--;
while(bot[r][c].type==type){
r++,c--;
}
if((rt!=r||ct!=c)){
if(type==1){bot[r][c].w_legal=1;}else{bot[r][c].b_legal=1;}
bot[r][c].correlation[bot[r][c].c_n].r=rt-1;
bot[r][c].correlation[bot[r][c].c_n].c=ct+1;
bot[r][c].c_n++;
}
}
}
void right_down(int type,int r,int c){
int rt=r+1,ct=c+1;
if(r+1<9&&c-1<9){
r++,c++;
while(bot[r][c].type==type){
r++,c++;
}
if((rt!=r||ct!=c)){
if(type==1){bot[r][c].w_legal=1;}else{bot[r][c].b_legal=1;}
bot[r][c].correlation[bot[r][c].c_n].r=rt-1;
bot[r][c].correlation[bot[r][c].c_n].c=ct-1;
bot[r][c].c_n++;
}
}
}
void change(){
int i,j;
for(i=0;i<=8;i++){
for(j=0;j<=8;j++){
if(bot[i][j].type==1){
up(2,i,j);
down(2,i,j);
left(2,i,j);
right(2,i,j);
left_up(2, i, j);
right_up(2, i,j);
left_down(2, i,j);
right_down(2, i,j);
}else if(bot[i][j].type==2){
up(1,i,j);
down(1,i,j);
left(1,i,j);
right(1,i,j);
left_up(1, i, j);
right_up(1, i,j);
left_down(1, i,j);
right_down(1, i,j);
}
}
}
}
void clear(){
int i,j;
for(i=1;i<9;i++){
for(j=1;j<9;j++){
bot[i][j].b_legal=0,bot[i][j].w_legal=0;
bot[i][j].c_n=0;
}
}
}
void lengthways(int r1,int r2,int c){
int rmax=max(r1,r2),rmin=min(r1,r2),i;
for(i=rmin+1;irt2;i++){
bot[rt1-i][ct1+i].type=bot[r1][c1].type;
bot[rt1-i][ct1+i].c_n=0;
bot[rt1-i][ct1+i].b_legal=0;
bot[rt1-i][ct1+i].w_legal=0;
}
}
void classified(int r1,int c1,int r2,int c2){
if(r1==r2){
crosscise(c1, c2, r1);
}else if(c1==c2){
lengthways(r1, r2, c1);
}else if((r1r2&&c1>c2)){
diagonal_l(r1, c1, r2, c2);
}else if((r1c2)||(r1>r2&&c1>n;
int f=0;
while(n--){
if(f!=0){
cout<<"\n";
}
clear();
for(i=1;i<9;i++){
for(j=1;j<9;j++){
cin>>t;
if(t=='W'){
bot[i][j].type=2;
}else if(t=='B'){
bot[i][j].type=1;
}else{
bot[i][j].type=0;
}
}
}
cin>>t;
string action;
while(1){
cin>>action;
if(action[0]=='L'){
clear();
change();
int move_n=0;
if(t=='B'){
for(i=1;i<9;i++){
for(j=1;j<9;j++){
if(bot[i][j].b_legal&&bot[i][j].type==0){
if(move_n){cout<<" ";}
cout<<"("<