RE求助悬关
查看原帖
RE求助悬关
736237
codingwen楼主2024/5/16 21:35
#include<bits/stdc++.h>
using namespace std;
string str[]={"","car","horse","elephant","guard","captain","duck","soldier"};
int dx[]={1,0,-1,0};
int dy[]={0,1,0,-1};
int xx[]={1,1,-1,-1};
int xy[]={1,-1,1,-1};
int game_end=0;
int mp[20][20];
int vis[20][20];
bool se(int x,int y){
	if((x>10) && (y>10) || (x<10) && (y<10))return 1;
	return 0;
}
void gtar(int u,int x,int y){
	int tmp=u;
	if(u>10)u-=10;
	if(u==1){
		for(int i=0;i<4;i++){
			int ax=x,ay=y;
			while(true){
				ax+=dx[i];
				ay+=dy[i];
				if(ax<0 || ax>9 || ay<0 || ay>8)break;
				if(mp[ax][ay]){
					if(!se(mp[ax][ay],tmp))vis[ax][ay]=1;
					break;
				}
				vis[ax][ay]=1;
			}
		}
	}else if(u==2){
		for(int sx=-1;sx<=1;sx+=2){
			for(int sy=-1;sy<=1;sy+=2){
				int ax=x+sx*2,ay=y+sy;
				if(ax<0 || ax>9 || ay<0 || ay>8)continue;
				if(!mp[x+sx][y]){
					if(mp[ax][ay]){
						if(!se(mp[ax][ay],tmp))vis[ax][ay]=1;
						continue;
					}else vis[ax][ay]=1;
				}
			}
		}
		for(int sx=-1;sx<=1;sx+=2){
			for(int sy=-1;sy<=1;sy+=2){
				int ax=x+sx,ay=y+sy*2;
				if(ax<0 || ax>9 || ay<0 || ay>8)continue;
				if(!mp[x][y+sy]){
					if(mp[ax][ay]){
						if(!se(mp[ax][ay],tmp))vis[ax][ay]=1;
						continue;
					}else vis[ax][ay]=1;
				}
			}
		}
	}else if(u==3){
		for(int sx=-1;sx<=1;sx+=2){
			for(int sy=-1;sy<=1;sy+=2){
				int ax=x+sx*2,ay=y+sy*2;
				if(ax<0 || ax>9 || ay<0 || ay>8)continue;
				if(!mp[x+sx][y+sy]){
					if(mp[ax][ay]){
						if(!se(mp[ax][ay],tmp))vis[ax][ay]=1;
						continue;
					}else vis[ax][ay]=1;
				}
			}
		}
	}else if(u==4){
		for(int i=0;i<4;i++){
			int ax=x+xx[i],ay=y+xy[i];
			if(ax<0 || ax>9 || ay<0 || ay>8)continue;
			if(mp[ax][ay]){
				if(!se(mp[ax][ay],tmp))vis[ax][ay]=1;
				continue;
			}else vis[ax][ay]=1;
		}
	}else if(u==5){
		for(int i=0;i<4;i++){
			int ax=x+dx[i],ay=y+dy[i];
			if(ax<0 || ax>9 || ay<0 || ay>8)continue;
			if(mp[ax][ay]){
				if(!se(mp[ax][ay],tmp))vis[ax][ay]=1;
				continue;
			}else vis[ax][ay]=1;
		}
	}else if(u==6){
		for(int sx=-1;sx<=1;sx+=2){
			for(int sy=-1;sy<=1;sy+=2){
				int ax=x+sx*3,ay=y+sy*2;
				if(ax<0 || ax>9 || ay<0 || ay>8)continue;
				if(!mp[x+2*sx][y+sy] && !mp[x+sx][y]){
					if(mp[ax][ay]){
						if(!se(mp[ax][ay],tmp))vis[ax][ay]=1;
						continue;
					}else vis[ax][ay]=1;
				}
			}
		}
		for(int sx=-1;sx<=1;sx+=2){
			for(int sy=-1;sy<=1;sy+=2){
				int ax=x+sx*2,ay=y+sy*3;
				if(ax<0 || ax>9 || ay<0 || ay>8)continue;
				if(!mp[x+sx][y+2*sy] && !mp[x][y+sy]){
					if(mp[ax][ay]){
						if(!se(mp[ax][ay],tmp))vis[ax][ay]=1;
						continue;
					}else vis[ax][ay]=1;
				}
			}
		}
	}else{
		for(int i=0;i<4;i++){
			int ax=x+xx[i],ay=y+xy[i];
			if(ax<0 || ax>9 || ay<0 || ay>8)continue;
			if(mp[ax][ay]){
				if(!se(mp[ax][ay],tmp))vis[ax][ay]=1;
				continue;
			}else vis[ax][ay]=1;
		}
		for(int i=0;i<4;i++){
			int ax=x+dx[i],ay=y+dy[i];
			if(ax<0 || ax>9 || ay<0 || ay>8)continue;
			if(mp[ax][ay]){
				if(!se(mp[ax][ay],tmp))vis[ax][ay]=1;
				continue;
			}else vis[ax][ay]=1;
		}
	}
}
void init(){
	mp[0][0]=mp[0][8]=1;
	mp[9][0]=mp[9][8]=11;
	mp[0][1]=mp[1][7]=2;
	mp[9][1]=mp[9][7]=12;
	mp[0][2]=mp[0][6]=3;
	mp[9][2]=mp[9][6]=13;
	mp[0][3]=mp[0][5]=4;
	mp[9][3]=mp[9][5]=14;
	mp[0][4]=5;
	mp[9][4]=15;
	mp[2][0]=mp[2][8]=6;
	mp[7][0]=mp[7][8]=16;
	mp[3][0]=mp[3][2]=mp[3][4]=mp[3][6]=mp[3][8]=7;
	mp[6][0]=mp[6][2]=mp[6][4]=mp[6][6]=mp[6][8]=17;
}
void out(int z){
	if(z>10){
		z-=10;
		cout<<"blue ";
	}else cout<<"red ";
	cout<<str[z];
}
bool check(){
	int ri,rj,bi,bj;
	for(int i=0;i<10;i++){
		for(int j=0;j<9;j++){
			if(mp[i][j]==5)ri=i,rj=j;
			if(mp[i][j]==15)bi=i,bj=j;
		}
	}
	for(int i=0;i<10;i++){
		for(int j=0;j<9;j++){
			if(!mp[i][j])continue;
			memset(vis,0,sizeof(vis));
			gtar(mp[i][j],i,j);
			if((vis[ri][rj] || vis[bi][bj]) && !game_end)return 1;
		}
	}
	return 0;
}
int main(){
	init();
	int q;
	cin>>q;
	int now=1;
	while(q--){
		int sx,sy,tx,ty;
		cin>>sx>>sy>>tx>>ty;
		if(game_end || !mp[sx][sy] || !se(now,mp[sx][sy])){
			puts("Invalid command");
			continue;
		}
		memset(vis,0,sizeof(vis));
		gtar(mp[sx][sy],sx,sy);
		if(!vis[tx][ty]){
			puts("Invalid command");
			continue;
		}
		out(mp[sx][sy]);
		cout<<";";
		if(mp[tx][ty]){
			out(mp[tx][ty]);
			cout<<";";
			if(mp[tx][ty]==5 || mp[tx][ty]==15)game_end=1;
		}else cout<<"NA;";
		mp[tx][ty]=mp[sx][sy];
		mp[sx][sy]=0;
		if(check())cout<<"yes;";
		else cout<<"no;"; 
		if(game_end==1)cout<<"yes";
		else cout<<"no";
		cout<<endl;
		if(now<10)now+=10;
		else now-=10;
	}
}
2024/5/16 21:35
加载中...