Files
ExerciseHub/Luogu/P1002过河卒.cpp
2025-08-13 21:38:49 +08:00

64 lines
1.5 KiB
C++

#include <iostream>
using namespace std;
int main(){
int n,m,max,may;
cin>>n>>m>>may>>max;
long long a[22][22];
//reset to 0
for(int i=0;i<22;i++){
for(int j=0;j<22;j++){
a[i][j]=0;
}
}
for(int i = 0; i < 22; i++){
a[0][i]=1;
a[i][0]=1;
}
a[may][max]=-1;
if((may-1)>=0&&(max-2)>=0) a[may-1][max-2]=-1;
if((may-2)>=0&&(max-1)>=0) a[may-2][max-1]=-1;
if((may-2)>=0&&(max+1)<=21) a[may-2][max+1]=-1;
if((may-1)>=0&&(max+2)<=21) a[may-1][max+2]=-1;
if((may+1)<=21&&(max+2)<=21) a[may+1][max+2]=-1;
if((may+2)<=21&&(max+1)<=21) a[may+2][max+1]=-1;
if((may+2)<=21&&(max-1)>=0) a[may+2][max-1]=-1;
if((may+1)<=21&&(max-2)>=0) a[may+1][max-2]=-1;
for(int i=0;i<22;i++){
if(a[i][0]==-1){
for(int j=i;j<22;j++){
a[j][0]=0;
}
break;
}
}
for(int i=0;i<22;i++){
if(a[0][i]==-1){
for(int j=i;j<22;j++){
a[0][j]=0;
}
break;
}
}
for(int i=1;i<22;i++){
for(int j=1;j<22;j++){
if(a[i][j]==-1)
continue;
if(a[i][j]!=-1&&a[i-1][j]!=-1&&a[i][j-1]!=-1)
a[i][j]=a[i-1][j]+a[i][j-1];
if(a[i][j]!=-1&&a[i-1][j]!=-1&&a[i][j-1]==-1)
a[i][j]=a[i-1][j];
if(a[i][j]!=-1&&a[i-1][j]==-1&&a[i][j-1]!=-1)
a[i][j]=a[i][j-1];
}
}
cout<<a[n][m]<<endl;
/*
for(int i=0;i<22;i++){
for(int j=0;j<22;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}//*/
return 0;
}