#include <bits/stdc++.h>//模拟
#define int long long
using namespace std;
bool f,balive=1,ralive=1,f2;
int q,x,y,nx,ny;//指令
//棋盘 个位角色十位阵营
//初始化棋盘
int br=0,ax,ay,bx,by;
int wangx[10]={0,0,1,0,-1};
int wangy[10]={0,1,0,-1,0};//王的运动轨迹
int shix[10]={0,1,1,-1,-1};
int shiy[10]={0,1,-1,1,-1};
int xiangx[10]={0,2,2,-2,-2};
int xiangy[10]={0,2,-2,2,-2};
int maxx[10]={0,-1,1,2,2,1,-1,-2,-2};
int may[10]={0,2,2,1,-1,-2,-2,-1,1};
int yax[10]={0,-2,2,3,3,2,-2,-3,-3};
int yay[10]={0,3,3,2,-2,-3,-3,-2,2};
int a[11][10]={
{0,0,0,0,0,0,0,0,0,0},
{0,5,4,3,2,1,2,3,4,5},
{0,0,0,0,0,0,0,0,0,0},
{0,6,0,0,0,0,0,0,0,6},
{0,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,0,0},
{0,17,0,17,0,17,0,17,0,17},
{0,16,0,0,0,0,0,0,0,16},
{0,0,0,0,0,0,0,0,0,0},
{0,15,14,13,12,11,12,13,14,15}
};
int ciel(int x, int y){
if(x%y==0) return x/y;
else return x/y+1;
}
//王1士2象3马4车5鸭6兵7 红0蓝1
bool check(int x, int y, int nx, int ny){
if(br==1 && a[x][y]/10==0) return false;
if(br==0 && a[x][y]/10==1) return false;
if(!(nx>=1 && nx<=10 && ny>=1 && ny<=9)) return false;//落脚点在棋盘外
if(!(x>=1 && x<=10 && y>=1 && y<=9)) return false;//查找点在棋盘外
if(a[x][y]==0) return false;//没有棋子
if(a[nx][ny]/10==a[x][y]/10 && a[nx][ny]!=0) return false;//有一颗友军棋子在落脚点
if(x==nx && y==ny) return false;
//判断运动轨迹是否合法
int tx,ty;
f=0;
if(a[x][y]%10==1){//王
for(int i=1;i<=4;i++){
tx=x+wangx[i],ty=y+wangy[i];
if(tx==nx && ty==ny) f=1;
}return f;
}
if(a[x][y]%10==2){//士
for(int i=1;i<=4;i++){
tx=x+shix[i],ty=y+shiy[i];
if(tx==nx && ty==ny) f=1;
}return f;
}
if(a[x][y]%10==3){//象
for(int i=1;i<=4;i++){
tx=x+xiangx[i],ty=y+xiangy[i];
if(tx==nx && ty==ny && a[x+shix[i]][y+shiy[i]]==0) f=1;
}return f;
}
if(a[x][y]%10==4){//马
for(int i=1;i<=8;i++){
tx=x+maxx[i],ty=y+may[i];
if(tx==nx && ty==ny && a[x+wangx[ciel(i,2)]][y+wangy[ciel(i,2)]]==0){
f=1;
}
}return f;
}
if(a[x][y]%10==5){//车 +特判
for(int i=x-1;i>=1;i--){
if(nx==i && ny==y) return true;
if(a[i][y]!=0) break;
}//上
for(int i=x+1;i<=10;i++){
if(nx==i && ny==y) return true;
if(a[i][y]!=0) break;
}//下
for(int i=y-1;i>=1;i--){
if(ny==i && nx==x) return true;
if(a[x][i]!=0) break;
}//左
for(int i=y+1;i<=9;i++){
if(ny==i && nx==x) return true;
if(a[x][i]!=0) break;
}//右
return false;
}
if(a[x][y]%10==6){//鸭
for(int i=1;i<=8;i++){
tx=x+yax[i],ty=y+yay[i];
if(tx==nx && ty==ny && a[x+wangx[ciel(i,2)]][y+wangy[ciel(i,2)]]==0 && a[x+maxx[i]][y+may[i]]==0){
f=1;
}
}return f;
}
if(a[x][y]%10==7){//兵
for(int i=1;i<=4;i++){
tx=x+wangx[i],ty=y+wangy[i];
if(tx==nx && ty==ny) f=1;
}
for(int i=1;i<=4;i++){
tx=x+shix[i],ty=y+shiy[i];
if(tx==nx && ty==ny) f=1;
}return f;
}
}
bool checkmate(){
int tx,ty;
for(int i=1;i<=10;i++){
for(int j=1;j<=9;j++){
if(a[i][j]==0) continue;
if(a[i][j]%10==1){//是王
for(int k=1;k<=4;k++){
tx=i+wangx[k],ty=j+wangy[k];
if(a[tx][ty]/10!=a[i][j]/10 && a[tx][ty]%10==1){return true;}
}
}
if(a[i][j]%10==2){//士
for(int k=1;k<=4;k++){
tx=i+shix[k],ty=j+shiy[k];
if(a[tx][ty]/10!=a[i][j]/10 && a[tx][ty]%10==1){return true;}
}
}
if(a[i][j]%10==3){//象
for(int k=1;k<=4;k++){
tx=i+xiangx[k],ty=j+xiangy[k];
if(a[tx][ty]/10!=a[i][j]/10 && a[tx][ty]%10==1 && a[i+shix[k]][j+shiy[k]]==0){return true;}
}
}
if(a[i][j]%10==4){//马
for(int k=1;k<=8;k++){
tx=i+maxx[k],ty=j+may[k];
if(a[tx][ty]/10!=a[i][j]/10 && a[tx][ty]%10==1 && a[i+wangx[ciel(k,2)]][j+wangy[ciel(k,2)]]==0){
return true;
}
}
}
if(a[i][j]%10==5){//车 +特判
for(int k=i-1;k>=1;k--){
if(a[k][j]/10!=a[i][j]/10 && a[k][j]%10==1){return true;}
if(a[k][j]!=0) break;
}//上
for(int k=i+1;k<=10;k++){
if(a[k][j]/10!=a[i][j]/10 && a[k][j]%10==1){return true;}
if(a[k][j]!=0) break;
}//下
for(int k=j-1;k>=1;k--){
if(a[i][k]/10!=a[i][j]/10 && a[i][k]%10==1){return true;}
if(a[i][k]!=0) break;
}//左
for(int k=j+1;k<=9;k++){
if(a[i][k]/10!=a[i][j]/10 && a[i][k]%10==1){return true;}
if(a[i][k]!=0) break;
}//右
}
if(a[i][j]%10==6){//鸭
for(int k=1;k<=8;k++){
tx=i+yax[k],ty=j+yay[k];
if(a[tx][ty]/10!=a[i][j]/10&&a[tx][ty]%10==1&&a[i+wangx[ciel(k,2)]][j+wangy[ciel(k,2)]]==0&&a[i+maxx[k]][j+may[k]]==0){
return true;
}
}
}
if(a[i][j]%10==7){//兵
for(int k=1;k<=4;k++){
tx=i+wangx[k],ty=j+wangy[k];
if(a[tx][ty]/10!=a[i][j]/10&&a[tx][ty]%10==1) return true;
}
for(int k=1;k<=4;k++){
tx=i+shix[k],ty=j+shiy[k];
if(a[tx][ty]/10!=a[i][j]/10&&a[tx][ty]%10==1) return true;
}
}
}
}
return false;
}
void makeboard(){
cout<<"("<<x<<","<<y<<")"<<"->("<<nx<<","<<ny<<")"<<endl;
cout<<"x ";
for(int i=0;i<9;i++) cout<<' '<<i<<' ';
cout<<endl;
for(int i=1;i<=10;i++){
cout<<i-1<<' ';
for(int j=1;j<=9;j++){
if(a[i][j]==0) cout<<" 0 ";
if(a[i][j]/10==0){
if(a[i][j]%10==1) cout<<"王 ";
if(a[i][j]%10==2) cout<<"士 ";
if(a[i][j]%10==3) cout<<"象 ";
if(a[i][j]%10==4) cout<<"马 ";
if(a[i][j]%10==5) cout<<"车 ";
if(a[i][j]%10==6) cout<<"鸭 ";
if(a[i][j]%10==7) cout<<"兵 ";
}else{
if(a[i][j]%10==1) cout<<"将 ";
if(a[i][j]%10==2) cout<<"仕 ";
if(a[i][j]%10==3) cout<<"像 ";
if(a[i][j]%10==4) cout<<"馬 ";
if(a[i][j]%10==5) cout<<"車 ";
if(a[i][j]%10==6) cout<<"丫 ";
if(a[i][j]%10==7) cout<<"卒 ";
}
}cout<<endl;
}
}
signed main(){
cin>>q;
while(q--){
cin>>x>>y>>nx>>ny;//输入指令
x++,nx++,y++,ny++;
if(check(x,y,nx,ny) && ralive && balive){
if(a[x][y]/10==0) cout<<"red ";
else cout<<"blue ";
if(a[x][y]%10==1) cout<<"captain;";
if(a[x][y]%10==2) cout<<"guard;";
if(a[x][y]%10==3) cout<<"elephant;";
if(a[x][y]%10==4) cout<<"horse;";
if(a[x][y]%10==5) cout<<"car;";
if(a[x][y]%10==6) cout<<"duck;";
if(a[x][y]%10==7) cout<<"soldier;";
if(a[nx][ny]==0) cout<<"NA;";
else{
if(a[nx][ny]/10==0) cout<<"red ";
else cout<<"blue ";
if(a[nx][ny]%10==1) cout<<"captain;";
if(a[nx][ny]%10==2) cout<<"guard;";
if(a[nx][ny]%10==3) cout<<"elephant;";
if(a[nx][ny]%10==4) cout<<"horse;";
if(a[nx][ny]%10==5) cout<<"car;";
if(a[nx][ny]%10==6) cout<<"duck;";
if(a[nx][ny]%10==7) cout<<"soldier;";
if(a[x][y]/10==1 && a[nx][ny]/10==0 && a[nx][ny]%10==1) ralive=0;
if(a[x][y]/10==0 && a[nx][ny]/10==1 && a[nx][ny]%10==1) balive=0;
}
a[nx][ny]=a[x][y],a[x][y]=0;
if(checkmate() && !(ralive==0 || balive==0)) cout<<"yes;";
else cout<<"no;";
if(balive==0 || ralive==0) cout<<"yes";
else cout<<"no";
br=!br,cout<<endl;
}else{
cout<<"Invalid command"<<endl;
}
//makeboard();
}
return 0;
}
wrong answer On line 357 column 14, read y, expected n.