那就无解呀-0
by KaisuoShutong @ 2018-07-12 15:35:11
答案为0啊
by Farblos @ 2018-07-12 15:38:06
顺便请各位大佬帮改代码,对1,2,5点
```cpp
#include<bits/stdc++.h>
using namespace std;
int n,m,xh,yh;
long long b[21][21];
bool at[21][21];
void att (int,int);
int main()
{
scanf("%d%d%d%d",&n,&m,&xh,&yh);
att(xh,yh);
for (int i=1;i<=n;++i) if (!at[i][0]) b[i][0]=1;
for (int i=1;i<=m;++i) if (!at[0][i]) b[0][i]=1;
for (int i=1;i<=n;++i)
for (int j=1;j<=m;++j)
{
if (!at[i][j])
b[i][j]=b[i][j-1]+b[i-1][j];
}
cout<<b[n][m];
return 0;
}
void att (int x,int y)
{
at[x][y]=true; at[x+1][y+2]=true; at[x+2][y+1]=true;
if (x>=2&&y>=1) at[x-2][y-1]=true;
if (x>=2) at[x-2][y+1]=true;
if (x>=1) at[x-1][y+2]=true;
if (y>=1) at[x+2][y-1]=true;
if (y>=2) at[x+1][y-2]=true;
if (x>=1&&y>=2) at[x-1][y-2]=true;
}
```
还有,把输出换成printf为什么会在输出前多打一空格??
by 4kilometers @ 2018-07-12 15:40:52
因为换的时候是printf("%d",b[n][m]);
%d前后是控制格式的
如果多打了空格就会多加
by 斗神·君莫笑 @ 2018-07-12 16:17:21
@[斗神·君莫笑](/space/show?uid=49644) 哟西,谢谢大佬指点。大佬能否帮改下代码?
by 4kilometers @ 2018-07-12 16:19:30
@[执笔、捃尘](/space/show?uid=18535)
你的代码在初始化上左两行时有问题
```cpp
for(int i=1;i<=n;++i)
if(!at[i][0])
b[i][0]=1;
for(int i=1;i<=m;++i)
if (!at[0][i])
b[0][i]=1;
```
给你一组at的数据
0 0 0 0 1 0
0————
1————
0————
0————
0————
这样你的循环在碰到1以后仍然继续
明显违背题意
所以应该是
```cpp
for(int i=1;i<=n;++i){
if(at[i][0])break;
b[i][0]=1;
}
for(int i=1;i<=m;++i){
if(at[0][i])break;
b[0][i]=1;
}
```
by 斗神·君莫笑 @ 2018-07-12 16:33:32
@[斗神·君莫笑](/space/show?uid=49644) 多谢大佬帮本蒟蒻达成AC100!!(见笑)
by 4kilometers @ 2018-07-12 16:48:42