3k代码求调
查看原帖
3k代码求调
936276
zyzfido楼主2023/10/6 15:22

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;
}
2023/10/6 15:22
加载中...