求助CE
查看原帖
求助CE
755847
SJS_z楼主2023/12/30 13:25

rt,编译过了,但洛谷CE

#include<bits/stdc++.h>
using namespace std;
int qp[10][9]={{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},
				{17,0,17,0,17,0,17,0,17},
				{16,0,0,0,0,0,0,0,16},
				{0,0,0,0,0,0,0,0,0},
				{11,12,13,14,15,14,13,12,11}};//1³µ£¬2Âí£¬3Ïó£¬4Ê¿£¬5Íõ£¬6Ѽ£¬7±ø
int end=0;
int move_horse[8][2]={{1,2},{1,-2},{-1,-2},{-1,2},{2,1},{2,-1},{-2,-1},{-2,1}};
int move_elephant[4][2]={{2,2},{2,-2},{-2,2},{-2,-2}};
int move_guard[4][2]={{1,1},{1,-1},{-1,-1},{-1,1}};
int move_captain[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int move_duck[8][2]={{3,2},{3,-2},{-3,2},{-3,-2},{2,3},{2,-3},{-2,3},{-2,-3}};
int move_soldier[8][2]={{1,0},{-1,0},{0,1},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}};
void move(int sx,int sy,int ex,int ey){
	switch(qp[sx][sy]){
		case 1:
			printf("red car;");
			break;
		case 2:
			printf("red horse;");
			break;
		case 3:
			printf("red elephant;");
			break;
		case 4:
			printf("red guard;");
			break;
		case 6:
			printf("red duck;");
			break;
		case 7:
			printf("red soldier;");
			break;
		case 11:
			printf("blue car;");
			break;
		case 12:
			printf("blue horse;");
			break;
		case 13:
			printf("blue elephant;");
			break;
		case 14:
			printf("blue guard;");
			break;
		case 16:
			printf("blue duck;");
			break;
		case 17:
			printf("blue soldier;");
			break;
		case 5:
			printf("red captain;");
			break;
		case 15:
			printf("blue captain;");
			break;
	}
	switch(qp[ex][ey]){
		case 0:
			printf("NA;");
			break;
		case 1:
			printf("red car;");
			break;
		case 2:
			printf("red horse;");
			break;
		case 3:
			printf("red elephant;");
			break;
		case 4:
			printf("red guard;");
			break;
		case 6:
			printf("red duck;");
			break;
		case 7:
			printf("red soldier;");
			break;
		case 11:
			printf("blue car;");
			break;
		case 12:
			printf("blue horse;");
			break;
		case 13:
			printf("blue elephant;");
			break;
		case 14:
			printf("blue guard;");
			break;
		case 16:
			printf("blue duck;");
			break;
		case 17:
			printf("blue soldier;");
			break;
		case 5:
			printf("red captain;");
			end=1;
			break;
		case 15:
			printf("blue captain;");
			end=1;
			break;
	}
	qp[ex][ey]=qp[sx][sy];
	qp[sx][sy]=0;
}
int check_move(int sx,int sy,int ex,int ey,int turn){
	if (end==1){
		return 0;
	}
	if (turn==1){
		if (qp[sx][sy]==0 || qp[sx][sy]>7){
			return 0;
		}
	}else{
		if (qp[sx][sy]<11){
			return 0;
		}
	}
	if (qp[sx][sy]==0){
		return 0;
	}
	int f_move=-1;
	switch(qp[sx][sy]%10){
		case 1://³µ 
			if (sx!=ex && sy!=ey){
				return 0;
			}
			if (sx==ex){
				for (int i=min(sy,ey);i<max(sy,ey);i++){
					if (qp[sx][i]!=0){
						return 0;
					}
				}
			}else{
				for (int i=min(sx,ex);i<max(sx,ex);i++){
					if (qp[i][sy]!=0){
						return 0;
					}
				}
			}
			if (turn==1 && qp[ex][ey]>10){
				return 1;
			}
			if (turn==2 && qp[ex][ey]!=0 && qp[ex][ey]<10){
				return 1;
			}
			if (qp[ex][ey]==0){
				return 1;
			}
			return 0;
			break;
		case 2://Âí
			for (int i=0;i<8;i++){
				if (ex-sx==move_horse[i][0] && ey-sy==move_horse[i][1]){
					f_move=i;
					break;
				}
			}
			if (f_move==-1){
				return 0;
			}
			if (move_horse[f_move][0]==-2){
				if (qp[sx-1][sy]!=0){
					return 0;
				}
			}else if (move_horse[f_move][0]==2){
				if (qp[sx+1][sy]!=0){
					return 0;
				}
			}else if (move_horse[f_move][1]==2){
				if (qp[sx][sy+1]!=0){
					return 0;
				}
			}else if (move_horse[f_move][1]==-2){
				if (qp[sx][sy-1]!=0){
					return 0;
				}
			}
			if (turn==1 && qp[ex][ey]>10){
				return 1;
			}
			if (turn==2 && qp[ex][ey]!=0 && qp[ex][ey]<10){
				return 1;
			}
			if (qp[ex][ey]==0){
				return 1;
			}
			return 0;
			break;
		case 3://Ïó 
			for (int i=0;i<4;i++){
				if (ex-sx==move_elephant[i][0] && ey-sy==move_elephant[i][1]){
					f_move=i;
					break;
				}
			}
			if (f_move==-1){
				return 0;
			}
			if (qp[sx+move_elephant[f_move][0]/2][sy+move_elephant[f_move][1]/2]!=0){
				return 0;
			}
			if (turn==1 && qp[ex][ey]>10){
				return 1;
			}
			if (turn==2 && qp[ex][ey]!=0 && qp[ex][ey]<10){
				return 1;
			}
			if (qp[ex][ey]==0){
				return 1;
			}
			return 0;
			break;
		case 4://Ê¿
			for (int i=0;i<4;i++){
				if (ex-sx==move_guard[i][0] && ey-sy==move_guard[i][1]){
					f_move=i;
					break;
				}
			}
			if (f_move==-1){
				return 0;
			}
			if (turn==1 && qp[ex][ey]>10){
				return 1;
			}
			if (turn==2 && qp[ex][ey]!=0 && qp[ex][ey]<10){
				return 1;
			}
			if (qp[ex][ey]==0){
				return 1;
			}
			return 0;
			break;
		case 5://Íõ
			for (int i=0;i<4;i++){
				if (ex-sx==move_captain[i][0] && ey-sy==move_captain[i][1]){
					f_move=i;
					break;
				}
			}
			if (f_move==-1){
				return 0;
			}
			if (turn==1 && qp[ex][ey]>10){
				return 1;
			}
			if (turn==2 && qp[ex][ey]!=0 && qp[ex][ey]<10){
				return 1;
			}
			if (qp[ex][ey]==0){
				return 1;
			}
			return 0;
			break;
		case 6://Ѽ
			for (int i=0;i<8;i++){
				if (ex-sx==move_duck[i][0] && ey-sy==move_duck[i][1]){
					f_move=i;
					break;
				}
			}
			if (f_move==-1){
				return 0;
			}
			if (f_move==0){
				if (qp[sx+1][sy]!=0 || qp[sx+2][sy+1]!=0){
					return 0;
				}
			}else if (f_move==1){
				if (qp[sx+1][sy]!=0 || qp[sx+2][sy-1]!=0){
					return 0;
				}
			}else if (f_move==2){
				if (qp[sx-1][sy]!=0 || qp[sx-2][sy+1]!=0){
					return 0;
				}
			}else if (f_move==3){
				if (qp[sx-1][sy]!=0 || qp[sx-2][sy-1]!=0){
					return 0;
				}
			}else if (f_move==4){
				if (qp[sx][sy+1]!=0 || qp[sx+1][sy+2]!=0){
					return 0;
				}
			}else if (f_move==5){
				if (qp[sx][sy-1]!=0 || qp[sx+1][sy-2]!=0){
					return 0;
				}
			}else if (f_move==6){
				if (qp[sx][sy+1]!=0 || qp[sx-1][sy+2]!=0){
					return 0;
				}
			}else if (f_move==7){
				if (qp[sx][sy-1]!=0 || qp[sx-1][sy-2]!=0){
					return 0;
				}
			}
			if (turn==1 && qp[ex][ey]>10){
				return 1;
			}
			if (turn==2 && qp[ex][ey]!=0 && qp[ex][ey]<10){
				return 1;
			}
			if (qp[ex][ey]==0){
				return 1;
			}
			return 0;
			break;
		case 7:
			for (int i=0;i<8;i++){
				if (ex-sx==move_soldier[i][0] && ey-sy==move_soldier[i][1]){
					f_move=i;
					break;
				}
			}
			if (f_move==-1){
				return 0;
			}
			if (turn==1 && qp[ex][ey]>10){
				return 1;
			}
			if (turn==2 && qp[ex][ey]!=0 && qp[ex][ey]<10){
				return 1;
			}
			if (qp[ex][ey]==0){
				return 1;
			}
			return 0;
			break;
	}
}
int jiang(){
	if (end==1){
		return 0;
	}
	int bx,by,rx,ry;
	for (int i=0;i<10;i++){
		for (int j=0;j<9;j++){
			if (qp[i][j]==5){
				bx=i;
				by=j;
			}else if (qp[i][j]==15){
				rx=i;
				ry=j;
			}
		}
	}
	for (int i=0;i<10;i++){
		for (int j=0;j<9;j++){
			if (qp[i][j]==0){
				continue;
			}else if (qp[i][j]<10){
				if (check_move(i,j,rx,ry,1)==1){
					return 1;
				}
			}else if (qp[i][j]>10){
				if (check_move(i,j,bx,by,2)==1){
					return 1;
				}
			}
		}
	}
	return 0;
}
int main(){
	int Q,ch=1;
	scanf("%d",&Q);
	for (int i=1;i<=Q;i++){
		int sx,sy,ex,ey,t;
		scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
		if (ch%2==1){
			t=1;
		}else{
			t=2;
		}
		if (check_move(sx,sy,ex,ey,t)==0){
			printf("Invalid command\n");
		}else{
			ch++;
			move(sx,sy,ex,ey);
			if (jiang()==0){
				printf("no;");
			}else{
				printf("yes;");
			}
			if (end==0){
				printf("no\n");
			}else{
				printf("yes\n");
			}
		}
	}
	return 0;
}
2023/12/30 13:25
加载中...