WA on #2 求调
查看原帖
WA on #2 求调
1008614
Juan2012楼主2024/10/4 10:33
#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.

2024/10/4 10:33
加载中...