WA#2 求调玄关
查看原帖
WA#2 求调玄关
761509
dear_deer_land楼主2024/8/14 16:09

rt,谢谢。

//将军代码写好未在pd判定将军输出与游戏是否结束
#include<bits/stdc++.h>
using namespace std;
int a[110][100],n,t;
int dx[70][100],dy[70][100],madx[100],mady[100],duckx[100][30],ducky[100][30],c;
string s[70];
bool color=0,flag,flagend;
bool check() {
	for(int i=0; i<=9; i++) {
		for(int j=0; j<=8; j++) {
			if(a[i][j]!=0) {
				c=(a[i][j]-1)/7;
				if(c==1){
					c=0;
				}
				else{
					c=1;
				}
				if((a[i][j]-1)%7==0||(a[i][j]-1)%7==1) {
					t=(a[i][j]-1)%7;
					for(int k=1; k<=4; k++) {
						if(a[i+dx[t][k]][j+dy[t][k]]==1+c*7&&i+dx[t][k]>=0&&j+dy[t][k]>=0) {
//							cout<<"======"<<endl;
//							cout<<"[[[[[[[[["<<i+dx[t][k]<<"--------"<<j+dy[t][k]<<endl;
//							cout<<i<<"      "<<j<<"    "<<a[i][j]<<endl;
//							cout<<a[8][4]<<endl;
							return 1;
						}
					}
				} else if((a[i][j]-1)%7==2) {
					t=(a[i][j]-1)%7;
					for(int k=1; k<=4; k++) {
						if(a[i+(dx[t][k]/2)][j+(dy[t][k]/2)]==0) {
							if(a[i+dx[t][k]][j+dy[t][k]]==1+c*7&&i+dx[t][k]>=0&&j+dy[t][k]>=0) {
								return 1;
							}
						}
					}
				} else if((a[i][j]-1)%7==3) {
					t=(a[i][j]-1)%7;
					for(int k=1; k<=n; k++) {
						if(a[i+madx[k]][j+mady[k]]==0) {
							if(a[i+dx[t][k]][j+dy[t][k]]==1+c*7&&i+dx[t][k]>=0&&j+dy[t][k]>=0) {
//								cout<<endl;
//							cout<<"---++++-"<<a[i][j]<<"+++++---i:"<<i<<"+++++j:"<<j<<endl;
								return 1;
							}
						}
					}
				} else if((a[i][j]-1)%7==4) {
					t=(a[i][j]-1)%7;
					for(int k=0; k<i; k++) {
						if(a[k][j]!=0) {
							if(a[k][j]%7==1+c*7) {
								return 1;
							}
							break;
						}
					}
					for(int k=i+1; k<=9; k++) {
						if(a[k][j]!=0) {
							if(a[k][j]%7==1+c*7) {
								return 1;
							}
							break;
						}
					}
					for(int k=0; k<j; k++) {
						if(a[i][k]!=0) {
							if(a[i][k]%7==1+c*7) {
								return 1;
							}
							break;
						}
					}
					for(int k=j+1; k<=8; k++) {
						if(a[i][k]!=0) {
							if(a[i][k]%7==1+c*7) {
								return 1;
							}
							break;
						}
					}
				} else if((a[i][j]-1)%7==5) {
					t=(a[i][j]-1)%7;
					for(int k=1; k<=8; k++) {
						if(a[i+duckx[k][1]][j+ducky[k][1]]==0||a[i+duckx[k][2]][j+ducky[k][2]]==0) {
							if(a[i+dx[t][k]][j+dy[t][k]]==1+c*7&&i+dx[t][k]>=0&&j+dy[t][k]>=0) {
								return 1;
							}
						}
					}
				} else {
					t=(a[i][j]-1)%7;
					for(int k=1; k<=8; k++) {
						if(a[i+dx[t][k]][j+dy[t][k]]==1+c*7&&i+dx[t][k]>=0&&j+dy[t][k]>=0) {
							return 1;
						}
					}
				}
			}
		}
	}
	return 0;
}
bool pd(int x1,int y1,int x2,int y2) {
	if(a[x1][y1]==0) {
//		cout<<"---1---"<<endl;
		return 0;
	} else if((a[x1][y1]-1)/7!=color) {
//		cout<<"---2---"<<endl;
//		cout<<"+++++"<<a[x1][y1]<<"+++++"<<endl;
		return 0;
	} else if(flagend==1) {
//		cout<<"---3---"<<endl;
		return 0;
	} else if(a[x2][y2]!=0&&(a[x2][y2]-1)/7==color) {
		return 0;
	} else {
		if((a[x1][y1]-1)%7==0) {
			flag=0;
			for(int i=1; i<=4; i++) {
				if(x2-x1==dx[0][i]&&y2-y1==dy[0][i]) {
					flag=1;
				}
			}
			if(flag==0) {
				return 0;
			} else {
				if(color==0) {
					printf("red captain;");
					color=1;
				} else {
					printf("blue captain;");
					color=0;
				}
				if(a[x2][y2]==0) {
					printf("NA;");
				} else {
					if(color==0) {
						printf("red ");
						cout << s[(a[x2][y2]-1)%7] <<";";
					} else {
						printf("blue ");
						cout << s[(a[x2][y2]-1)%7] <<";";
					}
					if((a[x2][y2]-1)%7==0) {
						flagend=1;
					}
				}
				a[x2][y2]=a[x1][y1];
				a[x1][y1]=0;
				if(check()) {
					printf("yes;");
				} else {
					printf("no;");
				}
				if(flagend) {
					printf("yes");
				} else {
					printf("no");
				}
			}
		} else if((a[x1][y1]-1)%7==2) {
			if(abs(x1-x2)!=2||abs(y1-y2)!=2) {
				return 0;
			}
			if(a[(x1+x2)/2][(y1+y2)/2]!=0) {
				return 0;
			}
			flag=0;
			for(int i=1; i<=4; i++) {
				if(x2-x1==dx[2][i]&&y2-y1==dy[2][i]) {
					flag=1;
				}
			}
			if(flag==0) {
				return 0;
			} else {
				if(color==0) {
					printf("red ");
					cout << s[(a[x1][y1]-1)%7] <<";";
					color=1;
				} else {
					printf("blue ");
					cout << s[(a[x1][y1]-1)%7] <<";";
					color=0;
				}
				if(a[x2][y2]==0) {
					printf("NA;");
				} else {
					if(color==0) {
						printf("red ");
						cout << s[(a[x2][y2]-1)%7] <<";";
					} else {
						printf("blue ");
						cout << s[(a[x2][y2]-1)%7] <<";";
					}
					if((a[x2][y2]-1)%7==0) {
						flagend=1;
					}
				}
				a[x2][y2]=a[x1][y1];
				a[x1][y1]=0;
				if(check()) {
					printf("yes;");
				} else {
					printf("no;");
				}
				if(flagend) {
					printf("yes");
				} else {
					printf("no");
				}
			}
		} else if((a[x1][y1]-1)%7==1) {
			flag=0;
			for(int i=1; i<=4; i++) {
				if(x2-x1==dx[1][i]&&y2-y1==dy[1][i]) {
					flag=1;
				}
			}
			if(flag==0) {
//				cout<<"__________~~~~~~"<<endl;
				return 0;
			} else {
				if(color==0) {
					printf("red ");
					cout << s[(a[x1][y1]-1)%7] <<";";
					color=1;
				} else {
					printf("blue ");
					cout << s[(a[x1][y1]-1)%7] <<";";
					color=0;
				}
				if(a[x2][y2]==0) {
					printf("NA;");
				} else {
					if(color==0) {
						printf("red ");
						cout << s[(a[x2][y2]-1)%7] <<";";
					} else {
						printf("blue ");
						cout << s[(a[x2][y2]-1)%7] <<";";
					}
					if((a[x2][y2]-1)%7==0) {
						flagend=1;
					}
				}
				a[x2][y2]=a[x1][y1];
				a[x1][y1]=0;
				if(check()) {
					printf("yes;");
				} else {
					printf("no;");
				}
				if(flagend) {
					printf("yes");
				} else {
					printf("no");
				}
			}
		} else if((a[x1][y1]-1)%7==3) {
			flag=0;
			for(int i=1; i<=8; i++) {
				if(a[x1+madx[i]][y1+mady[i]]==0) {
					if(x2-x1==dx[3][i]&&y2-y1==dy[3][i]) {
						flag=1;
					}
				}
			}
			if(flag==0) {
				return 0;
			} else {
				if(color==0) {
					printf("red ");
					cout << s[(a[x1][y1]-1)%7] <<";";
					color=1;
				} else {
					printf("blue ");
					cout << s[(a[x1][y1]-1)%7] <<";";
					color=0;
				}
				if(a[x2][y2]==0) {
					printf("NA;");
				} else {
					if(color==0) {
						printf("red ");
						cout << s[(a[x2][y2]-1)%7] <<";";
					} else {
						printf("blue ");
						cout << s[(a[x2][y2]-1)%7] <<";";
					}
					if((a[x2][y2]-1)%7==0) {
						flagend=1;
					}
				}
				a[x2][y2]=a[x1][y1];
				a[x1][y1]=0;
				if(check()) {
					printf("yes;");
				} else {
					printf("no;");
				}
				if(flagend) {
					printf("yes");
				} else {
					printf("no");
				}
			}
		} else if((a[x1][y1]-1)%7==4) {
			flag=0;
			if(x2==x1||y2==y1) {
				t=(a[x1][y1]-1)%7;
				for(int k=0; k<x1; k++) {
					if(k==x2&&y1==y2) {
						flag=1;
					}
					if(a[k][y1]!=0) {
						break;
					}
				}
				for(int k=x1+1; k<=9; k++) {
					if(k==x2&&y1==y2) {
						flag=1;
					}
					if(a[k][y1]!=0) {
						break;
					}
				}
				for(int k=0; k<y1; k++) {
					if(x1==x2&&k==y2) {
						flag=1;
					}
					if(a[x1][k]!=0) {
						break;
					}
				}
				for(int k=y1+1; k<=8; k++) {
					if(x1==x2&&k==y2) {
						flag=1;
					}
					if(a[x1][k]!=0) {
						break;
					}
				}
				if(flag==0) {
					return 0;
				}
				if(color==0) {
					printf("red ");
					cout << s[(a[x1][y1]-1)%7] <<";";
					color=1;
				} else {
					printf("blue ");
					cout << s[(a[x1][y1]-1)%7] <<";";
					color=0;
				}
				if(a[x2][y2]==0) {
					printf("NA;");
				} else {
					if(color==0) {
						printf("red ");
						cout << s[(a[x2][y2]-1)%7] <<";";
					} else {
						printf("blue ");
						cout << s[(a[x2][y2]-1)%7] <<";";
					}
					if((a[x2][y2]-1)%7==0) {
						flagend=1;
					}
				}
				a[x2][y2]=a[x1][y1];
				a[x1][y1]=0;
				if(check()) {
					printf("yes;");
				} else {
					printf("no;");
				}
				if(flagend) {
					printf("yes");
				} else {
					printf("no");
				}
			} else {
				return 0;
			}
		} else if((a[x1][y1]-1)%7==5) {
			flag=0;
			for(int i=1; i<=8; i++) {
				if(a[x1+duckx[i][1]][y1+ducky[i][1]]==0&&a[x1+duckx[i][2]][y1+ducky[i][2]]==0) {
					if(x2-x1==dx[5][i]&&y2-y1==dy[5][i]) {
//						cout<<"======="<<i<<endl;
//						cout<<x1+duckx[i][2]<<"         "<<y1+ducky[i][2]<<endl;
//						cout<<"-----"<<endl;
						flag=1;
					}
				}
			}
			if(flag==0) {
				return 0;
			} else {
				if(color==0) {
					printf("red ");
					cout << s[(a[x1][y1]-1)%7] <<";";
					color=1;
				} else {
					printf("blue ");
					cout << s[(a[x1][y1]-1)%7] <<";";
					color=0;
				}
				if(a[x2][y2]==0) {
					printf("NA;");
				} else {
					if(color==0) {
						printf("red ");
						cout << s[(a[x2][y2]-1)%7] <<";";
					} else {
						printf("blue ");
						cout << s[(a[x2][y2]-1)%7] <<";";
					}
					if((a[x2][y2]-1)%7==0) {
						flagend=1;
					}
				}
				a[x2][y2]=a[x1][y1];
				a[x1][y1]=0;
				if(check()) {
					printf("yes;");
				} else {
					printf("no;");
				}
				if(flagend) {
					printf("yes");
				} else {
					printf("no");
				}
			}
		} else if((a[x1][y1]-1)%7==6) {
//			cout<<"!!!!!!"<<a[x1][y1]<<"!!!!!!!!"<<endl;
			flag=0;
			for(int i=1; i<=8; i++) {
				if(x2-x1==dx[6][i]&&y2-y1==dy[6][i]) {
					flag=1;
				}
			}
			if(flag==0) {
				return 0;
			} else {
				if(color==0) {
					printf("red ");
					cout << s[(a[x1][y1]-1)%7] <<";";
					color=1;
				} else {
					printf("blue ");
					cout << s[(a[x1][y1]-1)%7] <<";";
					color=0;
				}
				if(a[x2][y2]==0) {
					printf("NA;");
				} else {
					if(color==0) {
						printf("red ");
						cout << s[(a[x2][y2]-1)%7] <<";";
					} else {
						printf("blue ");
						cout << s[(a[x2][y2]-1)%7] <<";";
					}
					if((a[x2][y2]-1)%7==0) {
						flagend=1;
					}
				}
				a[x2][y2]=a[x1][y1];
				a[x1][y1]=0;
				if(check()) {
					printf("yes;");
				} else {
					printf("no;");
				}
				if(flagend) {
					printf("yes");
				} else {
					printf("no");
				}
			}
		}
		printf("\n");
	}
	return 1;
}
int main() {
	s[0]="captain";
	s[1]="guard";
	s[2]="elephant";
	s[3]="horse";
	s[4]="car";
	s[5]="duck";
	s[6]="soldier";
	dx[0][1]=1;
	dx[0][2]=0;
	dx[0][3]=-1;
	dx[0][4]=0;
	dy[0][1]=0;
	dy[0][2]=1;
	dy[0][3]=0;
	dy[0][4]=-1;
	dx[1][1]=1;
	dx[1][2]=-1;
	dx[1][3]=1;
	dx[1][4]=-1;
	dy[1][1]=1;
	dy[1][2]=-1;
	dy[1][3]=-1;
	dy[1][4]=1;
	dx[2][1]=2;
	dx[2][2]=-2;
	dx[2][3]=-2;
	dx[2][4]=2;
	dy[2][1]=2;
	dy[2][2]=-2;
	dy[2][3]=2;
	dy[2][4]=-2;
	dx[3][1]=2;
	dx[3][2]=2;
	dx[3][3]=-2;
	dx[3][4]=-2;
	dx[3][5]=-1;
	dx[3][6]=-1;
	dx[3][7]=1;
	dx[3][8]=1;
	dy[3][1]=1;
	dy[3][2]=-1;
	dy[3][3]=-1;
	dy[3][4]=1;
	dy[3][5]=2;
	dy[3][6]=-2;
	dy[3][7]=-2;
	dy[3][8]=2;
	madx[1]=1;
	madx[2]=-1;
	madx[3]=-1;
	madx[4]=1;
	madx[5]=0;
	madx[6]=0;
	madx[7]=0;
	madx[8]=0;
	mady[1]=0;
	mady[2]=0;
	mady[3]=0;
	mady[4]=0;
	mady[5]=1;
	mady[6]=-1;
	mady[7]=-1;
	mady[8]=1;
	dx[5][1]=3;
	dx[5][2]=3;
	dx[5][3]=-3;
	dx[5][4]=-3;
	dx[5][5]=2;
	dx[5][6]=2;
	dx[5][7]=-2;
	dx[5][8]=-2;
	dy[5][1]=2;
	dy[5][2]=-2;
	dy[5][3]=-2;
	dy[5][4]=2;
	dy[5][5]=3;
	dy[5][6]=-3;
	dy[5][7]=-3;
	dy[5][8]=3;
	duckx[1][1]=2;
	ducky[1][1]=1;
	duckx[1][2]=1;
	ducky[1][2]=0;//
	duckx[2][1]=2;
	ducky[2][1]=-1;
	duckx[2][2]=1;
	ducky[2][2]=0;//
	duckx[3][1]=-2;
	ducky[3][1]=-1;
	duckx[3][2]=1;
	ducky[3][2]=0;//
	duckx[4][1]=1;
	ducky[4][1]=0;
	duckx[4][2]=-1;
	ducky[4][2]=0;//
	duckx[5][1]=0;
	ducky[5][1]=1;
	duckx[5][2]=1;
	ducky[5][2]=2;//
	duckx[6][1]=0;
	ducky[6][1]=-1;
	duckx[6][2]=1;
	ducky[6][2]=-2;//
	duckx[7][1]=0;
	ducky[7][1]=-1;
	duckx[7][2]=-1;
	ducky[7][2]=-2;//
	duckx[8][1]=0;
	ducky[8][1]=1;
	duckx[8][2]=-1;
	ducky[8][2]=2;
	dx[6][1]=1;
	dx[6][2]=-1;
	dx[6][3]=0;
	dx[6][4]=0;
	dx[6][5]=1;
	dx[6][6]=1;
	dx[6][7]=-1;
	dx[6][8]=-1;
	dy[6][1]=0;
	dy[6][2]=0;
	dy[6][3]=1;
	dy[6][4]=-1;
	dy[6][5]=1;
	dy[6][6]=-1;
	dy[6][7]=-1;
	dy[6][8]=1;
	a[0][0]=5;
	a[0][1]=4;
	a[0][2]=3;
	a[0][3]=2;
	a[0][4]=1;
	a[0][5]=2;
	a[0][6]=3;
	a[0][7]=4;
	a[0][8]=5;
	a[2][0]=6;
	a[2][8]=6;
	a[3][0]=7;
	a[3][2]=7;
	a[3][4]=7;
	a[3][6]=7;
	a[3][8]=7;
	a[6][0]=14;
	a[6][2]=14;
	a[6][4]=14;
	a[6][6]=14;
	a[6][8]=14;
	a[7][0]=13;
	a[7][8]=13;
	a[9][0]=12;
	a[9][1]=11;
	a[9][2]=10;
	a[9][3]=9;
	a[9][4]=8;
	a[9][5]=9;
	a[9][6]=10;
	a[9][7]=11;
	a[9][8]=12;
//	for(int i=0;i<10;i++){
//		for(int j=0;j<9;j++){
//			cout<<a[i][j]<<" ";
//		}
//		cout<<endl;
//	}
	color=0;//0红1蓝
	cin>>n;
	for(int i=1,x1,x2,y1,y2; i<=n; i++) {
		scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
		if(pd(x1,y1,x2,y2)==0) {
			printf("Invalid command\n");
//			cout<<"+++++"<<a[x1][y1]<<"++++++"<<endl;
		}
	}
//	k[5][5]=9;
//	for(int i=1;i<=8;i++){
//		k[5+dx[5][i]][5+dy[5][i]]=i;
//	}
//	for(int i=1;i<=10;i++){
//		for(int j=1;j<=10;j++){
//			cout<<k[i][j]<<" ";
//		}
//		cout<<'\n';
//	}
	return 0;
}
/*红: 王(captain) :0
      士(guard):1
  	  象(elephant):2
  	  马(horse):3
  	  车(car):4
  	  鸭(duck):5
  	  兵(soldier):6
  蓝: 王(captain) :7
      士(guard):8
  	  象(elephant):9
  	  马(horse):10
  	  车(car):11
  	  鸭(duck):12
  	  兵(soldier):13
*/
2024/8/14 16:09
加载中...