求调
查看原帖
求调
758636
Time_Flyer楼主2024/12/24 20:21
#include<bits/stdc++.h>
using namespace std;
int Q,bx=9,by=4,rx=0,ry=4;
struct Chess{
	int id,color;//red0 blue1; id=1->¨®D??¡Á¨® 
	string name;
}c[15][15];
void build(){
	c[0][0].name="car"; c[0][0].id=1; c[0][0].color=0;
	c[0][1].name="horse"; c[0][1].id=1; c[0][1].color=0;
	c[0][2].name="elephant"; c[0][2].id=1; c[0][2].color=0;
	c[0][3].name="guard"; c[0][3].id=1; c[0][3].color=0;
	c[0][4].name="captain"; c[0][4].id=1; c[0][4].color=0;
	c[0][8].name="car"; c[0][8].id=1; c[0][8].color=0;
	c[0][7].name="horse"; c[0][7].id=1; c[0][7].color=0;
	c[0][6].name="elephant"; c[0][6].id=1; c[0][6].color=0;
	c[0][5].name="guard"; c[0][5].id=1; c[0][5].color=0;
	c[2][0].name="duck"; c[2][0].id=1; c[2][0].color=0;
	c[2][8].name="duck"; c[2][8].id=1; c[2][8].color=0;
	c[3][0].name=c[3][2].name=c[3][4].name=c[3][6].name=c[3][8].name="soldier";
	c[3][0].id=c[3][2].id=c[3][4].id=c[3][6].id=c[3][8].id=1;
	c[3][0].color=c[3][2].color=c[3][4].color=c[3][6].color=c[3][8].color=0;
	//red
	c[9][0].name="car"; c[9][0].id=1; c[9][0].color=1;
	c[9][1].name="horse"; c[9][1].id=1; c[9][1].color=1;
	c[9][2].name="elephant"; c[9][2].id=1; c[9][2].color=1;
	c[9][3].name="guard"; c[9][3].id=1; c[9][3].color=1;
	c[9][4].name="captain"; c[9][4].id=1; c[9][4].color=1;
	c[9][8].name="car"; c[9][8].id=1; c[9][8].color=1;
	c[9][7].name="horse"; c[9][7].id=1; c[9][7].color=1;
	c[9][6].name="elephant"; c[9][6].id=1; c[9][6].color=1;
	c[9][5].name="guard"; c[9][5].id=1; c[9][5].color=1;
	c[7][0].name="duck"; c[7][0].id=1; c[7][0].color=1;
	c[7][8].name="duck"; c[7][8].id=1; c[7][8].color=1;
	c[6][0].name=c[6][2].name=c[6][4].name=c[6][6].name=c[6][8].name="soldier";
	c[6][0].id=c[6][2].id=c[6][4].id=c[6][6].id=c[6][8].id=1;
	c[6][0].color=c[6][2].color=c[6][4].color=c[6][6].color=c[6][8].color=1;
	//blue
	for(int i=0;i<10;i++){
		for(int j=0;j<9;j++){
			if(!c[i][j].id) c[i][j].color=3;
		}
	}
}
int xs,ys,xt,yt,nowc;
bool okmoveca(){
	if((abs(xt-xs)==1&&abs(yt-ys)!=0)||(abs(yt-ys)==1&&abs(xt-xs)!=0)||(abs(xt-xs)!=1&&abs(yt-ys)!=1)) return false;
	return true;
}
bool okmovegu(){
	if(abs(xt-xs)!=1||abs(yt-ys)!=1) return false;
	return true;
}
bool okmoveel(){
	if(abs(xt-xs)!=2||abs(yt-ys)!=2) return false;
	if(c[(xt+xs)/2][(yt+ys)/2].id) return false;
	return true;
}
bool okmoveho(){
	if((abs(xt-xs)==2&&abs(yt-ys)!=1)||(abs(yt-ys)==2&&abs(xt-xs)!=1)||(abs(xt-xs)!=2&&abs(yt-ys)!=2)) return false;
	if(abs(xt-xs)==2&&c[(xs+xt)/2][ys].id) return false;
	if(abs(yt-ys)==2&&c[xs][(yt+ys)/2].id) return false;
	return true;
	//000
	//000
}
bool okmovecar(){
	if(xt!=xs&&yt!=ys) return false;
	if(xt==xs){
		for(int i=min(yt,ys)+1;i<max(yt,ys);i++) if(c[xs][i].id) return false;	
	}
	if(yt==ys){
		for(int i=min(xs,xt)+1;i<max(xs,xt);i++) if(c[i][ys].id) return false;
	} 
	return true;
}
bool okmovedu(){
	if((abs(xt-xs)==2&&abs(yt-ys)!=3)||(abs(xt-xs)==3&&abs(yt-ys)!=2)||(abs(xt-xs)!=3&&abs(yt-ys)!=3)) return false;
	if(abs(xt-xs)==3){
		if(yt>ys){
			if(xt>xs&&(c[xs+1][ys].id||c[xs+2][ys+1].id)) return false;
			if(xt<xs&&(c[xs-1][ys].id||c[xs-2][ys+1].id)) return false;
		}else{
			if(xt>xs&&(c[xs+1][ys].id||c[xs+2][ys-1].id)) return false;
			if(xt<xs&&(c[xs-1][ys].id||c[xs-2][ys-1].id)) return false;
		}
	}else{
		if(yt>ys){
			if(xt>xs&&(c[xs][ys+1].id||c[xs+1][ys+2].id)) return false;
			if(xt<xs&&(c[xs][ys+1].id||c[xs-1][ys+2].id)) return false;
		}else{
			if(xt>xs&&(c[xs][ys-1].id||c[xs+1][ys-2].id)) return false;
			if(xt<xs&&(c[xs][ys-1].id||c[xs-1][ys-2].id)) return false;
		}
	}
	return true;
}
bool okmoveso(){
	int dx[9]={1,0,1,0,-1,1,-1,-1,0},dy[9]={1,1,0,-1,0,-1,1,-1,0};
	for(int i=0;i<8;i++) if(xt==xs+dx[i]&&yt==ys+dy[i]) return true;
	return false;
}
bool ifend=0;
int main(){
	cin>>Q;
	build();
	for(int k=1;k<=Q;k++){	
		cin>>xs>>ys>>xt>>yt;
		if(c[xt][yt].color==c[xs][ys].color||!c[xs][ys].id||xt<0||xt>9||yt<0||yt>8||c[xs][ys].color!=nowc||ifend){
			cout<<"Invalid command\n";
		}else{
			if(c[xs][ys].name=="captain"&&!okmoveca()){cout<<"Invalid command\n"; continue;}
			if(c[xs][ys].name=="guard"&&!okmovegu()){cout<<"Invalid command\n"; continue;}
			if(c[xs][ys].name=="elephant"&&!okmoveel()){cout<<"Invalid command\n"; continue;}
			if(c[xs][ys].name=="horse"&&!okmoveho()){cout<<"Invalid command\n"; continue;}
			if(c[xs][ys].name=="car"&&!okmovecar()){cout<<"Invalid command\n"; continue;}
			if(c[xs][ys].name=="duck"&&!okmovedu()){cout<<"Invalid command\n"; continue;}
			if(c[xs][ys].name=="soldier"&&!okmoveso()){cout<<"Invalid command\n"; continue;}
			if(nowc==0) cout<<"red ";
			else cout<<"blue ";
			cout<<c[xs][ys].name<<";";
			if(c[xs][ys].name=="captain"){
				if(!c[xs][ys].color){
					rx=xt; ry=yt;
				}else{
					bx=xt; by=yt;
				}
			}	
			if(c[xt][yt].id){
				if(c[xt][yt].name=="captain") ifend=1;
				if(c[xt][yt].color) cout<<"blue ";
				else cout<<"red ";
				cout<<c[xt][yt].name<<";";
				c[xt][yt].name=c[xs][ys].name;
				c[xt][yt].color=c[xs][ys].color;
				c[xs][ys].id=0;
				c[xs][ys].color=3;
			}else{
				cout<<"NA;";
				c[xt][yt].name=c[xs][ys].name;
				c[xt][yt].color=c[xs][ys].color;
				c[xs][ys].id=0;
				c[xt][yt].id=1;
				c[xs][ys].color=3;
			} 
			bool flag=0;
			for(int i=0;i<10;i++){
				for(int j=0;j<9;j++){
					xs=i; ys=j;
					if(c[i][j].name=="captain"&&c[i][j].id){
						xt=rx; yt=ry;
						if(c[i][j].color&&okmoveca())flag=1;
						xt=bx; yt=by;
						if(!c[i][j].color&&okmoveca())flag=1;	
					}
					if(c[i][j].name=="guard"&&c[i][j].id){
						xt=rx; yt=ry;
						if(c[i][j].color&&okmovegu())flag=1;  
						xt=bx; yt=by;
						if(!c[i][j].color&&okmovegu())flag=1;		
					}
					if(c[i][j].name=="elephant"&&c[i][j].id){
						xt=rx; yt=ry;
						if(c[i][j].color&&okmoveel())flag=1;  
						xt=bx; yt=by;
						if(!c[i][j].color&&okmoveel())flag=1; 	
					}
					if(c[i][j].name=="horse"&&c[i][j].id){
						xt=rx; yt=ry;
						if(c[i][j].color&&okmoveho())flag=1;
						xt=bx; yt=by;
						if(!c[i][j].color&&okmoveho())flag=1; 
					}
					if(c[i][j].name=="car"&&c[i][j].id){
						xt=rx; yt=ry;
						if(c[i][j].color&&okmovecar())flag=1; 
						xt=bx; yt=by;
						if(!c[i][j].color&&okmovecar())flag=1; 
					}
					if(c[i][j].name=="duck"&&c[i][j].id){
						xt=rx; yt=ry;
						if(c[i][j].color&&okmovedu())flag=1; 
						xt=bx; yt=by;
						if(!c[i][j].color&&okmovedu())flag=1; 					
					}
					if(c[i][j].name=="soldier"&&c[i][j].id){
						xt=rx; yt=ry;
						if(c[i][j].color&&okmoveso())flag=1; 
						xt=bx; yt=by;
						if(!c[i][j].color&&okmoveso())flag=1; 	
					}
				}
			}
			if(flag) cout<<"yes;"; else cout<<"no;";
			if(ifend) cout<<"no";
			else{	
				if(ifend) cout<<"yes";
				else cout<<"no";}
			if(nowc==1) nowc=0; else nowc=1;
			cout<<endl;
		}
	}
	return 0;
}
2024/12/24 20:21
加载中...