社区讨论
求调,405行代码,玄一关
P5380[THUPC 2019] 鸭棋参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @min3gqqz
- 此快照首次捕获于
- 2025/12/01 19:57 3 个月前
- 此快照最后确认于
- 2025/12/01 20:22 3 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
int n,xs,ys,xt,yt;
bool rb,die;
int qi[10][9];
bool pd_in_qi(int x,int y){
if(x<0||x>9||y<0||y>8) return 0;
return 1;
}
string zhi[2]={"red","blue"};
string tiao[14]={"captain ","guard ","elephant ","horse ","car ","duck ","soldier ","captain ","guard ","elephant ","horse ","car ","duck ","soldier "};
string qizi[14]={"captain","guard","elephant","horse","car","duck","soldier","captain","guard","elephant","horse","car","duck","soldier"};
//红:0-captain 1-guard 2-elephant 3-horse 4-car 5-duck 6-soldier
//蓝:7-captain 8-guard 9-elephant 10-horse 11-car 12-duck 13-soldier
bool check_captain(int x,int y,int mm){
if(mm==1) if((pd_in_qi(x+1,y)&&qi[x+1][y]==0)||(pd_in_qi(x-1,y)&&qi[x-1][y]==0)||(pd_in_qi(x,y+1)&&qi[x][y+1]==0)||(pd_in_qi(x,y-1)&&qi[x][y-1]==0)) return 1;
if(mm==0) if((pd_in_qi(x+1,y)&&qi[x+1][y]==7)||(pd_in_qi(x-1,y)&&qi[x-1][y]==7)||(pd_in_qi(x,y+1)&&qi[x][y+1]==7)||(pd_in_qi(x,y-1)&&qi[x][y-1]==7)) return 1;
return 0;
}
bool check_guard(int x,int y,int mm){
if(mm==1) if((pd_in_qi(x+1,y+1)&&qi[x+1][y+1]==0)||(pd_in_qi(x-1,y-1)&&qi[x-1][y-1]==0)||(pd_in_qi(x-1,y+1)&&qi[x-1][y+1]==0)||(pd_in_qi(x+1,y-1)&&qi[x+1][y-1]==0)) return 1;
if(mm==0) if((pd_in_qi(x+1,y+1)&&qi[x+1][y+1]==7)||(pd_in_qi(x-1,y-1)&&qi[x-1][y-1]==7)||(pd_in_qi(x-1,y+1)&&qi[x-1][y+1]==7)||(pd_in_qi(x+1,y-1)&&qi[x+1][y-1]==7)) return 1;
return 0;
}
bool check_elephant(int x,int y,int mm){
if(mm==1) if((pd_in_qi(x+2,y+2)&&qi[x+1][y+1]==-1&&qi[x+2][y+2]==0)||(pd_in_qi(x-2,y-2)&&qi[x-1][y-1]==-1&&qi[x-2][y-2]==0)||(pd_in_qi(x-2,y+2)&&qi[x-1][y+1]==-1&&qi[x-2][y+2]==0)||(pd_in_qi(x+2,y-2)&&qi[x+1][y-1]==-1&&qi[x+2][y-2]==0)) return 1;
if(mm==0) if((pd_in_qi(x+2,y+2)&&qi[x+1][y+1]==-1&&qi[x+2][y+2]==7)||(pd_in_qi(x-2,y-2)&&qi[x-1][y-1]==-1&&qi[x-2][y-2]==7)||(pd_in_qi(x-2,y+2)&&qi[x-1][y+1]==-1&&qi[x-2][y+2]==7)||(pd_in_qi(x+2,y-2)&&qi[x+1][y-1]==-1&&qi[x+2][y-2]==7)) return 1;
return 0;
}
bool check_horse(int x,int y,int mm){
if(mm==1) if((pd_in_qi(x+2,y+1)&&qi[x+1][y]==-1&&qi[x+2][y+1]==0)||(pd_in_qi(x-2,y-1)&&qi[x-1][y]==-1&&qi[x-2][y-1]==0)||(pd_in_qi(x-1,y+2)&&qi[x][y+1]==-1&&qi[x-1][y+2]==0)||(pd_in_qi(x+1,y-2)&&qi[x][y-1]==-1&&qi[x+1][y-2]==0)||(pd_in_qi(x+2,y-1)&&qi[x+1][y]==-1&&qi[x+2][y-1]==0)||(pd_in_qi(x-2,y+1)&&qi[x-1][y]==-1&&qi[x-2][y+1]==0)||(pd_in_qi(x-1,y-2)&&qi[x][y-1]==-1&&qi[x-1][y-2]==0)||(pd_in_qi(x+1,y+2)&&qi[x][y+1]==-1&&qi[x+1][y+2]==0)) return 1;
if(mm==0) if((pd_in_qi(x+2,y+1)&&qi[x+1][y]==-1&&qi[x+2][y+1]==7)||(pd_in_qi(x-2,y-1)&&qi[x-1][y]==-1&&qi[x-2][y-1]==7)||(pd_in_qi(x-1,y+2)&&qi[x][y+1]==-1&&qi[x-1][y+2]==7)||(pd_in_qi(x+1,y-2)&&qi[x][y-1]==-1&&qi[x+1][y-2]==7)||(pd_in_qi(x+2,y-1)&&qi[x+1][y]==-1&&qi[x+2][y-1]==7)||(pd_in_qi(x-2,y+1)&&qi[x-1][y]==-1&&qi[x-2][y+1]==7)||(pd_in_qi(x-1,y-2)&&qi[x][y-1]==-1&&qi[x-1][y-2]==7)||(pd_in_qi(x+1,y+2)&&qi[x][y+1]==-1&&qi[x+1][y+2]==7)) return 1;
return 0;
}
bool check_car(int x,int y,int mm){
int pp=(mm==0)?7:0;
for(int j=y+1;j<=8;++j){
if(qi[x][j]!=-1){
if(qi[x][j]==pp) return 1;
break;
}
}
for(int j=y-1;j>=0;--j){
if(qi[x][j]!=-1){
if(qi[x][j]==pp) return 1;
break;
}
}
for(int j=x+1;j<=9;++j){
if(qi[j][y]!=-1){
if(qi[j][y]==pp) return 1;
break;
}
}
for(int j=x-1;j>=0;--j){
if(qi[j][y]!=-1){
if(qi[j][y]==pp) return 1;
break;
}
}
return 0;
}
bool check_duck(int x,int y,int mm){
if(mm==1) if((pd_in_qi(x+3,y+2)&&qi[x+1][y]==-1&&qi[x+2][y+1]==-1&&qi[x+3][y+2]==0)||(pd_in_qi(x-3,y-2)&&qi[x-1][y]==-1&&qi[x-2][y-1]==-1&&qi[x-3][y-2]==0)||(pd_in_qi(x-2,y+3)&&qi[x][y+1]==-1&&qi[x-1][y+2]==-1&&qi[x-2][y+3]==0)||(pd_in_qi(x+2,y-3)&&qi[x][y-1]==-1&&qi[x+1][y-2]==-1&&qi[x+2][y-3]==0)||(pd_in_qi(x+3,y-2)&&qi[x+1][y]==-1&&qi[x+2][y-1]==-1&&qi[x+3][y-2]==0)||(pd_in_qi(x-3,y+2)&&qi[x-1][y]==-1&&qi[x-2][y+1]==-1&&qi[x-3][y+2]==0)||(pd_in_qi(x-2,y-3)&&qi[x][y-1]==-1&&qi[x-1][y-2]==-1&&qi[x-2][y-3]==0)||(pd_in_qi(x+2,y+3)&&qi[x][y+1]==-1&&qi[x+1][y+2]==-1&&qi[x+2][y+3]==0)) return 1;
if(mm==0) if((pd_in_qi(x+3,y+2)&&qi[x+1][y]==-1&&qi[x+2][y+1]==-1&&qi[x+3][y+2]==7)||(pd_in_qi(x-3,y-2)&&qi[x-1][y]==-1&&qi[x-2][y-1]==-1&&qi[x-3][y-2]==7)||(pd_in_qi(x-2,y+3)&&qi[x][y+1]==-1&&qi[x-1][y+2]==-1&&qi[x-2][y+3]==7)||(pd_in_qi(x+2,y-3)&&qi[x][y-1]==-1&&qi[x+1][y-2]==-1&&qi[x+2][y-3]==7)||(pd_in_qi(x+3,y-2)&&qi[x+1][y]==-1&&qi[x+2][y-1]==-1&&qi[x+3][y-2]==7)||(pd_in_qi(x-3,y+2)&&qi[x-1][y]==-1&&qi[x-2][y+1]==-1&&qi[x-3][y+2]==7)||(pd_in_qi(x-2,y-3)&&qi[x][y-1]==-1&&qi[x-1][y-2]==-1&&qi[x-2][y-3]==7)||(pd_in_qi(x+2,y+3)&&qi[x][y+1]==-1&&qi[x+1][y+2]==-1&&qi[x+2][y+3]==7)) return 1;
return 0;
}
bool check_soldier(int x,int y,int mm){
if(mm==1) if((pd_in_qi(x+1,y+1)&&qi[x+1][y+1]==0)||(pd_in_qi(x-1,y-1)&&qi[x-1][y-1]==0)||(pd_in_qi(x-1,y+1)&&qi[x-1][y+1]==0)||(pd_in_qi(x+1,y-1)&&qi[x+1][y-1]==0)||(pd_in_qi(x,y+1)&&qi[x][y+1]==0)||(pd_in_qi(x,y-1)&&qi[x][y-1]==0)||(pd_in_qi(x-1,y)&&qi[x-1][y]==0)||(pd_in_qi(x+1,y)&&qi[x+1][y]==0)) return 1;
if(mm==0) if((pd_in_qi(x+1,y+1)&&qi[x+1][y+1]==7)||(pd_in_qi(x-1,y-1)&&qi[x-1][y-1]==7)||(pd_in_qi(x-1,y+1)&&qi[x-1][y+1]==7)||(pd_in_qi(x+1,y-1)&&qi[x+1][y-1]==7)||(pd_in_qi(x,y+1)&&qi[x][y+1]==7)||(pd_in_qi(x,y-1)&&qi[x][y-1]==7)||(pd_in_qi(x-1,y)&&qi[x-1][y]==7)||(pd_in_qi(x+1,y)&&qi[x+1][y]==7)) return 1;
return 0;
}
int main(){
// freopen("mf.in","r",stdin);
// freopen("mf.out","w",stdout);
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n;
rb=0;
memset(qi,-1,sizeof(qi));
qi[0][4]=0,qi[0][3]=qi[0][5]=1,qi[0][2]=qi[0][6]=2,qi[0][1]=qi[0][7]=3,qi[0][0]=qi[0][8]=4,qi[2][0]=qi[2][8]=5,qi[3][0]=qi[3][2]=qi[3][4]=qi[3][6]=qi[3][8]=6;
qi[9][4]=7,qi[9][3]=qi[9][5]=8,qi[9][2]=qi[9][6]=9,qi[9][1]=qi[9][7]=10,qi[9][0]=qi[9][8]=11,qi[7][0]=qi[7][8]=12,qi[6][0]=qi[6][2]=qi[6][4]=qi[6][6]=qi[6][8]=13;
for(int i=1;i<=n;++i){
cin>>xs>>ys>>xt>>yt;
if(die){
cout<<"Invalid command\n";
continue;
}
if((!pd_in_qi(xs,ys))||(!pd_in_qi(xt,yt))||qi[xs][ys]==-1||(xs==xt&&ys==yt)){
cout<<"Invalid command\n";
continue;
}
if(((qi[xs][ys]>=0&&qi[xs][ys]<=6)&&(qi[xt][yt]>=0&&qi[xt][yt]<=6))||((qi[xs][ys]>6)&&(qi[xt][yt]>6))){
cout<<"Invalid command\n";
continue;
}
if(rb==0){
if(qi[xs][ys]>6){
cout<<"Invalid command\n";
continue;
}
}
if(rb==1){
if(qi[xs][ys]>=0&&qi[xs][ys]<=6){
cout<<"Invalid command\n";
continue;
}
}
if(qi[xs][ys]==0||qi[xs][ys]==7){
if(abs(xs-xt)+abs(ys-yt)!=1){
cout<<"Invalid command\n";
continue;
}
cout<<zhi[rb]<<' '<<qizi[qi[xs][ys]]<<";";
if(qi[xt][yt]==-1)cout<<"NA;";
else{
if(qi[xt][yt]==0||qi[xt][yt]==7){
die=1;
}
cout<<zhi[rb^1]<<' '<<qizi[qi[xt][yt]]<<";";
}
qi[xt][yt]=qi[xs][ys];
qi[xs][ys]=-1;
bool flag=0;
if(rb==0){
for(int j=0;j<=9;++j){
for(int k=0;k<=8;++k){
if(qi[j][k]==7&&check_captain(j,k,rb^1)) flag=1;
else if(qi[j][k]==8&&check_guard(j,k,rb^1)) flag=1;
else if(qi[j][k]==9&&check_elephant(j,k,rb^1)) flag=1;
else if(qi[j][k]==10&&check_horse(j,k,rb^1)) flag=1;
else if(qi[j][k]==11&&check_car(j,k,rb^1)) flag=1;
else if(qi[j][k]==12&&check_duck(j,k,rb^1)) flag=1;
else if(qi[j][k]==13&&check_soldier(j,k,rb^1)) flag=1;
}
}
}
else{
for(int j=0;j<=9;++j){
for(int k=0;k<=8;++k){
if(qi[j][k]==0&&check_captain(j,k,rb^1)) flag=1;
else if(qi[j][k]==1&&check_guard(j,k,rb^1)) flag=1;
else if(qi[j][k]==2&&check_elephant(j,k,rb^1)) flag=1;
else if(qi[j][k]==3&&check_horse(j,k,rb^1)) flag=1;
else if(qi[j][k]==4&&check_car(j,k,rb^1)) flag=1;
else if(qi[j][k]==5&&check_duck(j,k,rb^1)) flag=1;
else if(qi[j][k]==6&&check_soldier(j,k,rb^1)) flag=1;
}
}
}
if(check_captain(xt,yt,rb)||flag){
cout<<"yes;";
}
else cout<<"no;";
if(die) cout<<"yes\n";
else cout<<"no\n";
rb^=1;
}
else if(qi[xs][ys]==1||qi[xs][ys]==8){
if(abs(xs-xt)!=1||abs(ys-yt)!=1){
cout<<"Invalid command\n";
continue;
}
cout<<zhi[rb]<<' '<<qizi[qi[xs][ys]]<<";";
if(qi[xt][yt]==-1)cout<<"NA;";
else{
if(qi[xt][yt]==0||qi[xt][yt]==7){
die=1;
}
cout<<zhi[rb^1]<<' '<<qizi[qi[xt][yt]]<<";";
}
qi[xt][yt]=qi[xs][ys];
qi[xs][ys]=-1;
if(check_guard(xt,yt,rb)){
cout<<"yes;";
}
else cout<<"no;";
if(die) cout<<"yes\n";
else cout<<"no\n";
rb^=1;
}
else if(qi[xs][ys]==2||qi[xs][ys]==9){
if(abs(xs-xt)!=2||abs(ys-yt)!=2){
cout<<"Invalid command\n";
continue;
}
if(qi[(xs+xt)/2][(ys+yt)/2]!=-1){
cout<<"Invalid command\n";
continue;
}
cout<<zhi[rb]<<' '<<qizi[qi[xs][ys]]<<";";
if(qi[xt][yt]==-1)cout<<"NA;";
else{
if(qi[xt][yt]==0||qi[xt][yt]==7){
die=1;
}
cout<<zhi[rb^1]<<' '<<qizi[qi[xt][yt]]<<";";
}
qi[xt][yt]=qi[xs][ys];
qi[xs][ys]=-1;
if(check_elephant(xt,yt,rb)){
cout<<"yes;";
}
else cout<<"no;";
if(die) cout<<"yes\n";
else cout<<"no\n";
rb^=1;
}
else if(qi[xs][ys]==3||qi[xs][ys]==10){
if(!((abs(xs-xt)==2&&abs(ys-yt)==1)||(abs(xs-xt)==1&&abs(ys-yt)==2))){
cout<<"Invalid command\n";
continue;
}
if(abs(xs-xt)==1){
if(qi[xs][(ys+yt)/2]!=-1){
cout<<"Invalid command\n";
continue;
}
}
if(abs(ys-yt)==1){
if(qi[(xs+xt)/2][ys]!=-1){
cout<<"Invalid command\n";
continue;
}
}
cout<<zhi[rb]<<' '<<qizi[qi[xs][ys]]<<";";
if(qi[xt][yt]==-1)cout<<"NA;";
else{
if(qi[xt][yt]==0||qi[xt][yt]==7){
die=1;
}
cout<<zhi[rb^1]<<' '<<qizi[qi[xt][yt]]<<";";
}
qi[xt][yt]=qi[xs][ys];
qi[xs][ys]=-1;
if(check_horse(xt,yt,rb)){
cout<<"yes;";
}
else cout<<"no;";
if(die) cout<<"yes\n";
else cout<<"no\n";
rb^=1;
}
else if(qi[xs][ys]==4||qi[xs][ys]==11){
if(xs!=xt&&ys!=yt){
cout<<"Invalid command\n";
continue;
}
if(xs==xt){
bool flag=1;
for(int j=min(ys,yt)+1;j<max(ys,yt);++j){
if(qi[xs][j]!=-1){
flag=0;
break;
}
}
if(!flag){
cout<<"Invalid command\n";
continue;
}
}
if(ys==yt){
bool flag=1;
for(int j=min(xs,xt)+1;j<max(xs,xt);++j){
if(qi[j][ys]!=-1){
flag=0;
break;
}
}
if(!flag){
cout<<"Invalid command\n";
continue;
}
}
cout<<zhi[rb]<<' '<<qizi[qi[xs][ys]]<<";";
if(qi[xt][yt]==-1)cout<<"NA;";
else{
if(qi[xt][yt]==0||qi[xt][yt]==7){
die=1;
}
cout<<zhi[rb^1]<<' '<<qizi[qi[xt][yt]]<<";";
}
qi[xt][yt]=qi[xs][ys];
qi[xs][ys]=-1;
if(check_car(xt,yt,rb)){
cout<<"yes;";
}
else cout<<"no;";
if(die) cout<<"yes\n";
else cout<<"no\n";
rb^=1;
}
else if(qi[xs][ys]==5||qi[xs][ys]==12){
if(!((abs(xs-xt)==3&&abs(ys-yt)==2)||(abs(xs-xt)==2&&abs(ys-yt)==3))){
cout<<"Invalid command\n";
continue;
}
if(xs+2==xt){
if(ys+3==yt){
if(qi[xs][ys+1]!=-1||qi[xs+1][ys+2]!=-1){
cout<<"Invalid command\n";
continue;
}
}
else{
if(qi[xs][ys-1]!=-1||qi[xs+1][ys-2]!=-1){
cout<<"Invalid command\n";
continue;
}
}
}
else if(xs-2==xt){
if(ys+3==yt){
if(qi[xs][ys+1]!=-1||qi[xs-1][ys+2]!=-1){
cout<<"Invalid command\n";
continue;
}
}
else{
if(qi[xs][ys-1]!=-1||qi[xs-1][ys-2]!=-1){
cout<<"Invalid command\n";
continue;
}
}
}
else if(xs+3==xt){
if(ys+2==yt){
if(qi[xs+1][ys]!=-1||qi[xs+2][ys+1]!=-1){
cout<<"Invalid command\n";
continue;
}
}
else{
if(qi[xs+1][ys]!=-1||qi[xs+2][ys-1]!=-1){
cout<<"Invalid command\n";
continue;
}
}
}
else{
if(ys+2==yt){
if(qi[xs-1][ys]!=-1||qi[xs-2][ys+1]!=-1){
cout<<"Invalid command\n";
continue;
}
}
else{
if(qi[xs-1][ys]!=-1||qi[xs-2][ys-1]!=-1){
cout<<"Invalid command\n";
continue;
}
}
}
cout<<zhi[rb]<<' '<<qizi[qi[xs][ys]]<<";";
if(qi[xt][yt]==-1)cout<<"NA;";
else{
if(qi[xt][yt]==0||qi[xt][yt]==7){
die=1;
}
cout<<zhi[rb^1]<<' '<<qizi[qi[xt][yt]]<<";";
}
qi[xt][yt]=qi[xs][ys];
qi[xs][ys]=-1;
if(check_duck(xt,yt,rb)){
cout<<"yes;";
}
else cout<<"no;";
if(die) cout<<"yes\n";
else cout<<"no\n";
rb^=1;
}
else if(qi[xs][ys]==6||qi[xs][ys]==13){
if(!(abs(xs-xt)==1||abs(ys-yt)!=1||abs(xs-xt)==0||abs(ys-yt)==0)){
cout<<"Invalid command\n";
continue;
}
cout<<zhi[rb]<<' '<<qizi[qi[xs][ys]]<<";";
if(qi[xt][yt]==-1)cout<<"NA;";
else{
if(qi[xt][yt]==0||qi[xt][yt]==7){
die=1;
}
cout<<zhi[rb^1]<<' '<<qizi[qi[xt][yt]]<<";";
}
qi[xt][yt]=qi[xs][ys];
qi[xs][ys]=-1;
if(check_soldier(xt,yt,rb)){
cout<<"yes;";
}
else cout<<"no;";
if(die) cout<<"yes\n";
else cout<<"no\n";
rb^=1;
}
// cout<<"mf: "<<i<<": \n";
// for(int j=9;j>=0;--j){
// for(int k=0;k<=8;++k){
// if(qi[j][k]==-1) cout<<" ";
// else cout<<tiao[qi[j][k]];
// }
// cout<<'\n';
// }
// cout<<"\n\n\n";
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...