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;
}