@[暗影之梦](/user/382274) 边界特判,因为可能马的控制区在边界上。
by ImposterAnYu @ 2021-07-26 14:54:16
```cpp
for(int i=0;i<=n;i++) a[i][0]=1;
for(int i=0;i<=m;i++) a[0][i]=1;
```
↓
```cpp
for(int i=0;i<=n;i++){
if(a[i][0] == 2e9) a[i][0]=0; else a[i][0]=1;
}
for(int i=0;i<=m;i++){
if(a[0][i] == 2e9) a[0][i]=0; else a[0][i]=1;
}
```
by ImposterAnYu @ 2021-07-26 14:56:55
@[ImopsterAnYu](/user/510555) 怎么搞的???Markdown炸了???
by ImposterAnYu @ 2021-07-26 14:57:29
@[ImopsterAnYu](/user/510555) 改后样例还是错的,输出1
```
#include<iostream>
#include<algorithm>
#include<cstdio>
#define int long long
using namespace std;
int n,m,x,y,ans;
bool a[21][21];
signed main()
{
scanf("%d%d%d%d",&n,&m,&x,&y);
a[x][y]=2e9;
if(x-2>=0&&y-1>=0) a[x-2][y-1]=2e9;
if(x-2>=0&&y+1>=0) a[x-2][y+1]=2e9;
if(x-1>=0&&y-2>=0) a[x-1][y-2]=2e9;
if(x-1>=0&&y+2>=0) a[x-1][y+2]=2e9;
if(x+1>=0&&y-2>=0) a[x+1][y-2]=2e9;
if(x+1>=0&&y+2>=0) a[x+1][y+2]=2e9;
if(x+2>=0&&y-1>=0) a[x+2][y-1]=2e9;
if(x+2>=0&&y+1>=0) a[x+2][y+1]=2e9;
for(int i=0;i<=n;i++)
{
if(a[i][0]!=2e9) a[i][0]=1;
else a[i][0]=0;
}
for(int i=0;i<=m;i++)
{
if(a[0][i]!=2e9) a[0][i]=1;
else a[0][i]=0;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]==2e9) a[i][j]=0;
else a[i][j]=a[i-1][j]+a[i][j-1];
}
}
printf("%d",a[n][m]);
return 0;
}
```
by 暗影之梦 @ 2021-07-26 15:21:10
@[暗影之梦](/user/382274) ~~是不是还要特判x + 1 > n,y + 1 > m,x + 2 > n,y + 2 > m的情况?~~(bushi)
by ImposterAnYu @ 2021-07-26 15:24:09
@[ImopsterAnYu](/user/510555) 感觉没有用
越界应该没有影响(当然蒟蒻的想法一般是错的)
by 暗影之梦 @ 2021-07-26 15:28:56
@[暗影之梦](/user/382274) 你这代码不对啊。
我调试之后跑了一遍,棋盘上全是1。
(即当 $0 \leq i \leq n$,$0 \leq j \leq m$ 时,$a_{i,j} = 1$!)
by ImposterAnYu @ 2021-07-26 15:35:24
@[暗影之梦](/user/382274) 而且最后结果要开long long,同时结果可能刚好等于2e9啊。
by ImposterAnYu @ 2021-07-26 15:37:14
@[暗影之梦](/user/382274) 等等,bool 数组?你个大天才!
by ImposterAnYu @ 2021-07-26 15:38:46
@[ImopsterAnYu](/user/510555) 之前写的时候zz了
现在代码只有60分
```
#include<iostream>
#include<algorithm>
#include<cstdio>
#define int long long
using namespace std;
int n,m,x,y,ans;
int a[21][21];
signed main()
{
scanf("%d%d%d%d",&n,&m,&x,&y);
a[x][y]=1e18;
if(x-2>=0&&y-1>=0) a[x-2][y-1]=1e18;
if(x-2>=0&&y+1>=0) a[x-2][y+1]=1e18;
if(x-1>=0&&y-2>=0) a[x-1][y-2]=1e18;
if(x-1>=0&&y+2>=0) a[x-1][y+2]=1e18;
if(x+1>=0&&y-2>=0) a[x+1][y-2]=1e18;
if(x+1>=0&&y+2>=0) a[x+1][y+2]=1e18;
if(x+2>=0&&y-1>=0) a[x+2][y-1]=1e18;
if(x+2>=0&&y+1>=0) a[x+2][y+1]=1e18;
for(int i=0;i<=n;i++)
{
if(a[i][0]!=1e18) a[i][0]=1;
else a[i][0]=0;
}
for(int i=0;i<=m;i++)
{
if(a[0][i]!=1e18) a[0][i]=1;
else a[0][i]=0;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]==1e18) a[i][j]=0;
else a[i][j]=a[i-1][j]+a[i][j-1];
}
}
printf("%d",a[n][m]);
return 0;
}
```
by 暗影之梦 @ 2021-07-26 15:50:10