代码:
//2021/4/30
#include <cstdio>
using namespace std;
const long long INF=(1ll<<40);
const int dx[15]={2,1,-1,-2,-2,-1,1,2};
const int dy[15]={1,2,2,1,-1,-2,-2,-1};
long long map[505][505];
int n,m,a,b;//20 20 4 0
int main()
{
fscanf("%d%d%d%d",&n,&m,&a,&b);
for(register int i=0;i<=m;i++)
{
map[0][i]=1ll;
}
for(register int i=0;i<=n;i++)
{
map[i][0]=1ll;
}
map[a][b]=INF;
for(register int i=0;i<8;i++)
{
int nx=a+dx[i];
int ny=b+dy[i];
if(nx>=0 && nx<=n && ny>=0 && ny<=m )
{
map[nx][ny]=INF;
}
}
for(register int i=1;i<=n;i++)
{
for(register int j=1;j<=m;j++)
{
if(map[i][j]==INF)
{
continue;
}
else if(map[i][j]!=INF && map[i-1][j]!=INF && map[i][j-1]!=INF)
{
map[i][j]=(long long)((long long)(map[i-1][j])+(long long)(map[i][j-1]));
}
else if(map[i][j]!=INF && map[i-1][j]==INF && map[i][j-1]!=INF)
{
map[i][j]=(long long)(map[i][j-1]);
}
else if(map[i][j]!=INF && map[i-1][j]!=INF && map[i][j-1]==INF)
{
map[i][j]=(long long)(map[i-1][j]);
}
}
}
printf("%lld\n",map[n][m]);
return 0;
}