求助

P1002 [NOIP2002 普及组] 过河卒

@[暗影之梦](/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


| 下一页