rt,萌新做大模拟题,调了4h还没调出来,崩溃了QwQ,求大佬调试
#include<bits/stdc++.h>
using namespace std;
int q,xs,ys,xt,yt,status;
bool game_end=false;
int disx[10]={1,1,-1,-1},disy[10]={1,-1,1,-1};
int disa[10]={0,1,2,1,0,3},disb[10]={1,1,2,2,0,2};
int st[15][15]={{1,1,1,1,1,1,1,1,1},
{0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,1},
{1,0,1,0,1,0,1,0,1},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{2,0,2,0,2,0,2,0,2},
{2,0,0,0,0,0,0,0,2},
{0,0,0,0,0,0,0,0,0},
{2,2,2,2,2,2,2,2,2}};
int b[15][15]={{5,4,3,2,1,2,3,4,5},
{0,0,0,0,0,0,0,0,0},
{6,0,0,0,0,0,0,0,6},
{7,0,7,0,7,0,7,0,7},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{7,0,7,0,7,0,7,0,7},
{6,0,0,0,0,0,0,0,6},
{0,0,0,0,0,0,0,0,0},
{5,4,3,2,1,2,3,4,5}};
void res(int id){
if(status==0)
cout<<"red ";
else
cout<<"blue ";
if(id==1){
cout<<"captain;";
return ;
}
if(id==2){
cout<<"guard;";
return ;
}
if(id==3){
cout<<"elephant;";
return ;
}if(id==4){
cout<<"horse;";
return ;
}if(id==5){
cout<<"car;";
return ;
}if(id==6){
cout<<"duck;";
return ;
}if(id==7){
cout<<"soldier;";
return ;
}
}
bool change(int xs,int ys,int xt,int yt,int id){
int up_bound=min(disa[id],disb[id])-(disa[id]==disb[id]);
for(int i=0;i<4;i++){
int dx=xs+disa[id]*disx[i],dy=ys+disb[id]*disy[i];
bool cnt=false;
if(dx==xt&&dy==yt&&dx>=0&&dx<=9&&dy>=0&&dy<=8){
for(int j=1;j<=up_bound&&!cnt;j++)
if(b[dx-j*disx[i]][dy-j*disy[i]])
cnt=true;
if(!cnt)
return true;
}
}
for(int i=0;i<4;i++){
int dx=xs+disb[id]*disx[i],dy=ys+disa[id]*disy[i];
bool cnt=false;
if(dx==xt&&dy==yt&&dx>=0&&dx<=9&&dy>=0&&dy<=8){
for(int j=1;j<=up_bound&&!cnt;j++)
if(b[dx-j*disx[i]][dy-j*disy[i]])
cnt=true;
if(!cnt)
return true;
}
}
return false;
}
bool Invalid(int xs,int ys,int xt,int yt){
if(xs<0||xs>9||ys<0||ys>8||xt<0||xt>9||yt<0||yt>8)
return true;
int id=b[xs][ys];
if(id==5){
int x_min=min(xs,xt),x_max=max(xs,xt);
int y_min=min(ys,yt),y_max=max(ys,yt);
if(xs!=xt&&ys!=yt)
return true;
if(xs==xt)
for(int i=y_min+1;i<y_max;i++)
if(b[xs][i])
return true;
else
for(int i=x_min+1;i<x_max;i++)
if(b[i][ys])
return true;
return false;
}
else if(id==7)
return (!(change(xs,ys,xt,yt,0)||change(xs,ys,xt,yt,1)));
else
return (!change(xs,ys,xt,yt,id-1));
}
bool stop(){
int tot=0;
for(int i=0;i<=9;i++)
for(int j=0;j<=8;j++)
if(b[i][j]==1)
tot++;
if(tot==2) return false;
else return true;
}
bool kill(int s){
int px,py;
for(int i=0;i<=9;i++){
for(int j=0;j<=8;j++){
if(b[i][j]!=0){
if(b[i][j]==1&&s==st[i][j]){
px=i,py=j;
break;
}
}
}
}
for(int i=0;i<=9;i++)
for(int j=0;j<=8;j++)
if(b[i][j]&&s!=st[i][j]&&!Invalid(i,j,px,py))
return true;
return false;
}
int main(){
cin>>q;
for(int i=1;i<=q;i++){
cin>>xs>>ys>>xt>>yt;
int current=status+1;
if(game_end||Invalid(xs,ys,xt,yt)||current!=st[xs][ys]||current==st[xt][yt]){
cout<<"Invalid command"<<endl;
continue;
}
res(b[xs][ys]);
status^=1;
if(st[xt][yt])
res(b[xt][yt]);
else
cout<<"NA;";
b[xt][yt]=b[xs][ys],st[xt][yt]=st[xs][ys];
b[xs][ys]=0,st[xs][ys]=0;
if(stop())
game_end=true;
if(kill(1)||kill(2))
cout<<"yes;";
else
cout<<"no;";
if(game_end)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
return 0;
}