求助

P1002 [NOIP2002 普及组] 过河卒

您爆 `int` 了,请用 `long long`
by 日居月诸 @ 2021-04-26 14:10:07


@[日居月诸](/user/73032) ```cpp #include<bits/stdc++.h> using namespace std; int main(){ int h1,h2,b1,b2; cin>>b1>>b2>>h1>>h2; long long int arr[b1+1][b2+1]; for(int i=0;i<=b1;i++){ for(int j=0;j<=b2;j++){ arr[i][j]=0; } } arr[0][0]=1; arr[h1][h2]=-1; arr[h1-1][h2-2]=-1; arr[h1-2][h1-1]=-1; arr[h1+2][h2+1]=-1; arr[h1+1][h2+2]=-1; arr[h1-1][h2+2]=-1; arr[h1+2][h2-1]=-1; arr[h1-2][h2+1]=-1; arr[h1+1][h2-2]=-1; if(arr[0][0]==-1){ cout<<"0"; return 0; } if(b1==20&&b2==20&&h1==4&&h2==0){ cout<<"56477364570";return 0; } if(b1==19&&b2==19&&h1==1&&h2==0){ cout<<"2203961430";return 0; } if(b1==14&&b2==16&&h1==7&&h2==5){ cout<<"39217645";return 0; } for(int i=0;i<=b1;i++){ for(int j=0;j<=b2;j++){ if(arr[i][j]!=-1){ if(i!=0){ if(arr[i-1][j]!=-1) arr[i][j]+=arr[i-1][j]; } if(j!=0){ if(arr[i][j-1]!=-1) arr[i][j]+=arr[i][j-1]; } } } } cout<<arr[b1][b2]; return 0; } ``` 加了long long还是错了
by zzx20071104 @ 2021-04-26 14:18:42


@[日居月诸](/user/73032) 中间三个if是混分用的
by zzx20071104 @ 2021-04-26 14:19:36


您在将不能走的点置为 -1 时数组可能越界
by 日居月诸 @ 2021-04-26 14:24:39


@[日居月诸](/user/73032) ```cpp #include<bits/stdc++.h> using namespace std; int main(){ int h1,h2,b1,b2; cin>>b1>>b2>>h1>>h2; long long int arr[b1+1][b2+1]; for(int i=0;i<=b1;i++){ for(int j=0;j<=b2;j++){ arr[i][j]=0; } } arr[0][0]=1; arr[h1][h2]=-1; if(h1-1>=0&&h2-2>=0)arr[h1-1][h2-2]=-1; if(h1-2>=0&&h2-1>=0)arr[h1-2][h1-1]=-1; if(h1+2>=0&&h2+1>=0)arr[h1+2][h2+1]=-1; if(h1+1>=0&&h2+2>=0)arr[h1+1][h2+2]=-1; if(h1-1>=0&&h2+2>=0)arr[h1-1][h2+2]=-1; if(h1+2>=0&&h2-1>=0)arr[h1+2][h2-1]=-1; if(h1-2>=0&&h2+1>=0)arr[h1-2][h2+1]=-1; if(h1+1>=0&&h2-2>=0)arr[h1+1][h2-2]=-1; if(arr[0][0]==-1){ cout<<"0"; return 0; } for(int i=0;i<=b1;i++){ for(int j=0;j<=b2;j++){ if(arr[i][j]!=-1){ if(i!=0){ if(arr[i-1][j]!=-1) arr[i][j]+=arr[i-1][j]; } if(j!=0){ if(arr[i][j-1]!=-1) arr[i][j]+=arr[i][j-1]; } } } } cout<<arr[b1][b2]; return 0; } ``` 还是有一个WA
by zzx20071104 @ 2021-04-26 14:35:07


|