玄关#2,dalao求调,似乎是check函数写错了
查看原帖
玄关#2,dalao求调,似乎是check函数写错了
957917
ljkgs6789楼主2024/7/10 14:09
#include<bits/stdc++.h>
using namespace std;
char side='R';
bool win,flag=true,flag1;
int mp[20][20]=
{
{1 ,2 ,3 ,4 ,5 ,4 ,3 ,2 ,1 },
{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 },
{15,0 ,15,0 ,15,0 ,15,0 ,15},
{14,0 ,0 ,0 ,0 ,0 ,0 ,0 ,14},
{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 },
{9 ,10,11,12,13,12,11,10,9 }
};
int used[20][20],used1[20][20];
int tx[10]={0,1,-1,0,0},ty[10]={0,0,0,1,-1};
int tx1[10]={0,1,-1,1,-1},ty1[10]={0,1,-1,-1,1};
int tx2[10]={0,1,-1,0,0,1,-1,1,-1},ty2[10]={0,0,0,1,-1,1,-1,-1,1};
void captain(int x,int y){
	for(int i=1;i<=4;i++){
		int dx=x+tx[i],dy=y+ty[i];
		if(dx<0||dx>9||dy<0||dy>8)continue;
		used[dx][dy]=1;
	}
}
void guard(int x,int y){
	for(int i=1;i<=4;i++){
		int dx=x+tx1[i],dy=y+ty1[i];
		if(dx<0||dx>9||dy<0||dy>8)continue;
		used[dx][dy]=1;
	}
}
void elephant(int x,int y){
	for(int i=1;i<=4;i++){
		int fx=x+tx1[i],fy=y+ty1[i];
		if(fx<0||fx>9||fy<0||fy>8)continue;
		if(mp[fx][fy]==0){
			int dx=x+tx1[i]*2,dy=y+ty1[i]*2;
			if(dx<0||dx>9||dy<0||dy>8)continue;
			used[dx][dy]=1;
		}
	}
}
void horse(int x,int y){
	for(int i=1;i<=4;i++){
		int fx=x+tx1[i];
		if(fx<0||fx>9)continue;
		if(mp[fx][y]==0){
			int dx=x+tx1[i]*2,dy=y+ty1[i];
			if(dx<0||dx>9||dy<0||dy>8)continue;
			used[dx][dy]=1;
		}
		int fy=y+ty1[i];
		if(fy<0||fy>8)continue;
		if(mp[x][fy]==0){
			int dx=x+tx1[i],dy=y+ty1[i]*2;
			if(dx<0||dx>9||dy<0||dy>8)continue;
			used[dx][dy]=1;
		}
	}
}
void car(int x,int y){
	for(int i=x-1;i>=0;i--){
		if(mp[i][y]!=0){
			if(side=='R'){
				if(mp[i][y]<=7){
					used[i][y]=1;
				}
			}else{
				if(mp[i][y]>=9){
					used[i][y]=1;
				}
			}
			break;
		}else{
			used[i][y]=1;
		}
	}
	for(int i=x+1;i<=9;i++){
		if(mp[i][y]!=0){
			if(side=='R'){
				if(mp[i][y]<=7){
					used[i][y]=1;
				}
			}else{
				if(mp[i][y]>=9){
					used[i][y]=1;
				}
			}
			break;
		}else{
			used[i][y]=1;
		}
	}
	for(int i=y-1;i>=0;i--){
		if(mp[x][i]!=0){
			if(side=='R'){
				if(mp[x][i]<=7){
					used[x][i]=1;
				}
			}else{
				if(mp[x][i]>=9){
					used[x][i]=1;
				}
			}
			break;
		}else{
			used[x][i]=1;
		}
	}
	for(int i=y+1;i<=8;i++){
		if(mp[x][i]!=0){
			if(side=='R'){
				if(mp[x][i]<=7){
					used[x][i]=1;
				}
			}else{
				if(mp[x][i]>=9){
					used[x][i]=1;
				}
			}
			break;
		}else{
			used[x][i]=1;
		}
	}
}
void duck(int x,int y){
	for(int i=1;i<=4;i++){
		int fx=x+tx1[i],fy=y+ty1[i],fx1=x+tx1[i]*2,fy1=y+ty1[i]*2;
		if(fx<0||fx>9||fy<0||fy>8||fx1<0||fx1>9||fy1<0||fy1>8)continue;
		if(mp[fx][y]==0&&mp[fx1][fy]==0){
			int dx=x+tx1[i]*3,dy=y+ty1[i]*2;
			if(dx<0||dx>9||dy<0||dy>8)continue;
			used[dx][dy]=1;
		}
		if(mp[x][fy]==0&&mp[fx][fy1]==0){
			int dx=x+tx1[i]*2,dy=y+ty1[i]*3;
			if(dx<0||dx>9||dy<0||dy>8)continue;
			used[dx][dy]=1;
		}
	}
}
void soldier(int x,int y){
	for(int i=1;i<=8;i++){
		int dx=x+tx2[i],dy=y+ty2[i];
		if(dx<0||dx>9||dy<0||dy>8)continue;
		used[dx][dy]=1;
	} 
}
void check(int x,int y,int l,int r,bool won){
	flag=1;
	for(int i=0;i<=11;i++){
		for(int j=0;j<=11;j++){
			used[i][j]=0;
		}
	}
	if(mp[x][y]==0||won==1||x<0||x>9||l<0||l>9||y<0||y>8||r<0||r>8){
		flag=false;
		return ;
	}
	if(side=='R'){
		if(mp[x][y]>=9||(mp[l][r]>0&&mp[l][r]<=7)){
			flag=false;
			return ;
		}
	}else{
		if(mp[x][y]<=7||mp[l][r]>=9){
			flag=false;
			return ;
		}
	}
	int num=mp[x][y];
	if(side=='R'){
		if(num==1)car(x,y);
		if(num==2)horse(x,y);
		if(num==3)elephant(x,y);
		if(num==4)guard(x,y);
		if(num==5)captain(x,y);
		if(num==6)duck(x,y);
		if(num==7)soldier(x,y);
	}else{
		if(num==9 )car(x,y);
		if(num==10)horse(x,y);
		if(num==11)elephant(x,y);
		if(num==12)guard(x,y);
		if(num==13)captain(x,y);
		if(num==14)duck(x,y);
		if(num==15)soldier(x,y);
	}
	if(used[l][r]==0){
		flag=false;
		return ;
	}
}
void question_one(int x,int y){
	if(side=='R'){
		cout<<"red "; 
	}else{
		cout<<"blue ";
	}
	int num=mp[x][y];
	if(num==1||num==9)cout<<"car;";
	if(num==2||num==10)cout<<"horse;";
	if(num==3||num==11)cout<<"elephant;";
	if(num==4||num==12)cout<<"guard;";
	if(num==5||num==13)cout<<"captain;";
	if(num==6||num==14)cout<<"duck;";
	if(num==7||num==15)cout<<"soldier;";
}
void question_two(int x,int y){
	int num=mp[x][y];
	if(num==0){
		cout<<"NA;";
		return ;
	}
	if(side=='R'){
		cout<<"blue "; 
	}else{
		cout<<"red ";
	}
	if(num==1||num==9)cout<<"car;";
	if(num==2||num==10)cout<<"horse;";
	if(num==3||num==11)cout<<"elephant;";
	if(num==4||num==12)cout<<"guard;";
	if(num==5||num==13)cout<<"captain;";
	if(num==6||num==14)cout<<"duck;";
	if(num==7||num==15)cout<<"soldier;";
}
void question_three1(int l,int r){
	for(int i=0;i<=9;i++){
		for(int j=0;j<=8;j++){
			used[i][j]=0;
			used1[i][j]=used[i][j];
		}
	}
	if(side=='R'){
		for(int i=0;i<=9;i++){
			for(int j=0;j<=8;j++){
				int num=mp[i][j];
				if(num==9)car(i,j);
				if(num==10)horse(i,j);
				if(num==11)elephant(i,j);
				if(num==12)guard(i,j);
				if(num==14)duck(i,j);
				if(num==15)soldier(i,j);
			}
		}
	}else{
		for(int i=0;i<=9;i++){
			for(int j=0;j<=8;j++){
				int num=mp[i][j];
				if(num==1)car(i,j);
				if(num==2)horse(i,j);
				if(num==3)elephant(i,j);
				if(num==4)guard(i,j);
				if(num==6)duck(i,j);
				if(num==7)soldier(i,j);
			}
		}
	}
	if(used[l][r]==1){
		cout<<"yes;";
		flag1=1;
	}
	for(int i=0;i<=9;i++){
		for(int j=0;j<=8;j++){
			used[i][j]=0;
			used1[i][j]=used[i][j];
		}
	}
}
void question_three2(int x,int y,int l,int r){
	flag1=0;
	for(int i=0;i<=9;i++){
		for(int j=0;j<=8;j++){
			used[i][j]=0;
			used1[i][j]=used[i][j];
		}
	}
	int ooo=mp[l][r];
	mp[l][r]=mp[x][y];
	mp[x][y]=0;
	if(side=='R'){
		for(int i=0;i<=9;i++){
			for(int j=0;j<=8;j++){
				int num=mp[i][j];
				if(num==9)car(i,j);
				if(num==10)horse(i,j);
				if(num==11)elephant(i,j);
				if(num==12)guard(i,j);
				if(num==14)duck(i,j);
				if(num==15)soldier(i,j);
			}
		}
	}else{
		for(int i=0;i<=9;i++){
			for(int j=0;j<=8;j++){
				int num=mp[i][j];
				if(num==1)car(i,j);
				if(num==2)horse(i,j);
				if(num==3)elephant(i,j);
				if(num==4)guard(i,j);
				if(num==6)duck(i,j);
				if(num==7)soldier(i,j);
			}
		}
	}
	for(int i=0;i<=9;i++){
		for(int j=0;j<=8;j++){
			used1[i][j]=used[i][j];
			used[i][j]=0;
		}
	}
	if(side=='R'){
		for(int i=0;i<=9;i++){
			for(int j=0;j<=8;j++){
				int num=mp[i][j];
				if(num==1)car(i,j);
				if(num==2)horse(i,j);
				if(num==3)elephant(i,j);
				if(num==4)guard(i,j);
				if(num==6)duck(i,j);
				if(num==7)soldier(i,j);
			}
		}
	}else{
		for(int i=0;i<=9;i++){
			for(int j=0;j<=8;j++){
				int num=mp[i][j];
				if(num==9)car(i,j);
				if(num==10)horse(i,j);
				if(num==11)elephant(i,j);
				if(num==12)guard(i,j);
				if(num==14)duck(i,j);
				if(num==15)soldier(i,j);
			}
		}
	}
	mp[x][y]=mp[l][r];
	mp[l][r]=ooo;
	if(side=='R'){
		for(int i=0;i<=9;i++){
			for(int j=0;j<=8;j++){
				if(mp[i][j]==5){
					if(used1[i][j]==1){
						cout<<"yes;";
						flag1=1;
						return ;
					}
				}
				if(mp[i][j]==13){
					if(used[i][j]==1){
						cout<<"yes;";
						flag1=1;
						return ;
					}
				}
			}
		}
	}else{
		for(int i=0;i<=9;i++){
			for(int j=0;j<=8;j++){
				if(mp[i][j]==13){
					if(used1[i][j]==1){
						cout<<"yes;";
						flag1=1;
						return ;
					}
				}
				if(mp[i][j]==5){
					if(used[i][j]==1){
						cout<<"yes;";
						flag1=1;
						return ;
					}
				}
			}
		}
	}
}
void question_four(bool won){
	if(won==1){
		cout<<"yes"<<endl;
	}else{
		cout<<"no"<<endl;
	}
}
int q,x,y,l,r;
int main(){
	cin>>q;
	while(q--){
		flag=0;flag1=0;
		cin>>x>>y>>l>>r;
		for(int i=0;i<=11;i++){
			for(int j=0;j<=11;j++){
				used[i][j]=0;
			}
		}
		check(x,y,l,r,win);
		if(flag==false){
			cout<<"Invalid command"<<endl;
			continue;
		}
		question_one(x,y);
		for(int i=0;i<=9;i++){
			for(int j=0;j<=8;j++){
				used[i][j]=0;
				used1[i][j]=used[i][j];
			}
		}
		question_two(l,r);
		for(int i=0;i<=9;i++){
			for(int j=0;j<=8;j++){
				used[i][j]=0;
				used1[i][j]=used[i][j];
			}
		}
		if(mp[x][y]==5||mp[x][y]==13){
			question_three1(l,r);
		}else{
			question_three2(x,y,l,r);
			for(int i=0;i<=9;i++){
				for(int j=0;j<=8;j++){
					used[i][j]=0;
					used1[i][j]=used[i][j];
				}
			}
		}
		if(flag1==0){
			cout<<"no;";
		}
		if(mp[l][r]==5||mp[l][r]==13){
			win=1;
		}
		question_four(win);
		mp[l][r]=mp[x][y];
		mp[x][y]=0;
		if(side=='R'){
			side='B';
		}else{
			side='R';
		}
	}
	return 0;
}
2024/7/10 14:09
加载中...