#include<bits/stdc++.h>
using namespace std;
int d2[8][2]={{-1,-2},{1,-2},{-2,-1},{2,-1},{-2,1},{2,1},{-1,2},{1,2}};
int x,y,k,l;
int vis[25][25];
int a[25][25];
bool check(int m,int n)
{
if(m<0||n<0||m>x+1||n>y+1)
return false;
return true;
}
#define int long long //错误写法,应该放到前面
signed main()
{
cin>>x>>y>>k>>l;
vis[k+1][l+1]=1;
for(int i=0;i<8;i++)
{
if(check(k+d2[i][0]+1,l+d2[i][1]+1))
vis[k+d2[i][0]+1][l+d2[i][1]+1]=1;
}
a[1][1]=1;
for(int i=1;i<=x+1;i++)
{
for(int j=1;j<=y+1;j++)
{
if(i==1&&j==1)
continue;
if(vis[i][j])
a[i][j]=0;
else
{
a[i][j]+=a[i-1][j];
a[i][j]+=a[i][j-1];
}
}
}
cout<<a[x+1][y+1];
}
作用域混乱:宏定义没有常规变量的作用域规则,它从定义处开始文本替换式生效,贯穿后续整个代码文件,这会导致难以把控替换的范围,可能在一些局部代码块内,不经意间就改变了类型语义,破坏原有代码逻辑。
脑子抽了,发现题目可能会爆int,居然将它写在这么后面去了。