我竟然错了
磕头
#include <bits/stdc++.h>
using namespace std;
unsigned long long n,m,x,y;
unsigned long long a[100][100];
bool b[100][100];
void horse(){
for(unsigned long long i=0;i<4;i++){
switch(i) {
case 0:{
long long _x=x-2,_y=y+1;
if(_x>=0 && _y<=m){
b[_x][_y]=0;
}
_y-=2;
if(_x>=0 && _y>=0){
b[_x][_y]=0;
b[_x][_y-1]=0;
}
break;
}
case 1:{
long long _x=x+2,_y=y+1;
if(_x<=n && _y<=m){
b[_x][_y]=0;
}
_y-=2;
if(_x<=n && _y>=0){
b[_x][_y]=0;
}
break;
}
case 2:{
long long _x=x+1,_y=y-2;
if(_x<=n && _y>=0){
b[_x][_y]=0;
}
_x-=2;
if(_x>=0 && _y>=0){
b[_x][_y]=0;
b[_x-1][_y]=0;
}
break;
}
case 3:{
long long _x=x+1,_y=y+2;
if(_x<=n && _y<=m){
b[_x][_y]=0;
}
_x-=2;
if(_x>=0 && _y<=m){
b[_x][_y]=0;
}
break;
}
}
}
}
int main(){
scanf("%llu%llu%llu%llu",&n,&m,&x,&y);
n++;
m++;
for(unsigned long long i=0;i<n;i++){
for(unsigned long long j=0;j<m;j++){
a[i][j]=0;
}
}
for(unsigned long long i=0;i<n;i++){
for(unsigned long long j=0;j<m;j++){
b[i][j]=1;
}
}
b[x][y]=0;
horse();
for(unsigned long long i=0;i<n;i++){
if(b[i][0]){
a[i][0]=1;
}
}
for(unsigned long long i=0;i<m;i++){
if(b[0][i]){
a[0][i]=1;
}
}
for(unsigned long long i=1;i<n;i++){
for(unsigned long long j=1;j<m;j++){
if(!b[i][j]){
continue;
}
a[i][j]=max(a[i][j],a[i-1][j]+a[i][j-1]);
}
}
printf("%llu",a[n-1][m-1]);
return 0;
}