rt,不造为啥3,4个点过不去,已经很努力在改了QWQ
#include <iostream>
#include <string>
#include <algorithm>
#include <cmath>
#define b(II45I4,I9I98I0) if(II45I4 >= 0 && I9I98I0 >= 0 && I9I98I0 <= 21 && II45I4 <= 21) flag[II45I4][I9I98I0] = true;
using namespace std;
int n,m,cx,cy,a[22][22];
bool flag[22][22];
int main(){
cin >> n >> m >> cx >> cy;
a[0][0] = 1;
b(cx,cy)
b(cx-2,cy-1)
b(cx-2,cy+1)
b(cx-1,cy+2)
b(cx+1,cy+2)
b(cx+2,cy+1)
b(cx+2,cy-1)
b(cx-1,cy-2)
b(cx+1,cy-2)
// for(int i = 0;i <= n;i++){
// for(int j = 0;j <= m;j++){
// cout << flag[i][j];
// }
// cout << '\n';
// }
for(int i = 1;i <= n;i++){
if(!flag[i][0]) a[i][0] = a[i-1][0];
else a[i][0] = 0;
}
for(int i = 1;i <= m;i++){
if(!flag[0][i]) a[0][i] = a[0][i-1];
else a[0][i] = 0;
}
// for(int i = 0;i <= n;i++){
// for(int j = 0;j <= m;j++){
// cout << a[i][j] << " ";
// }
// cout << '\n';
// }
for(int i = 1;i <= n;i++){
for(int j = 1;j <= m;j++){
if(!flag[i][j]) a[i][j] = a[i-1][j] + a[i][j-1];
else a[i][j] = 0;
}
}
// for(int i = 0;i <= n;i++){
// for(int j = 0;j <= m;j++){
// cout << a[i][j] << " ";
// }
// cout << '\n';
// }
cout << a[n][m];
return 0;
}