1 条题解
-
0
C :
#include "stdio.h" int m,n,x,y; long long f[21][21]; int dx[]={1,1,-1,-1,2,2,-2,-2}; int dy[]={2,-2,2,-2,1,-1,1,-1}; int Exit(int x,int y){return x>=0&&x<=n&&y>=0&&y<=m;} int main() { int i,j; scanf("%d%d%d%d",&n,&m,&x,&y); f[0][0]=1; f[x][y]=-1; for(i=0;i<8;i++) { if(Exit(x+dx[i],y+dy[i])) f[x+dx[i]][y+dy[i]]=-1; } for(i=0;i<=n;i++) { for(j=0;j<=m;j++) { if(f[i][j]==-1) { f[i][j]=0; continue; } if(Exit(i-1,j)) f[i][j]+=f[i-1][j]; if(Exit(i,j-1)) f[i][j]+=f[i][j-1]; } } printf("%lld\n",f[n][m]); return 0; }
C++ :
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int n,m,x,y; int dx[8]={-1,-2,-2,-1,1,2,2,1}, dy[8]={-2,-1,1,2,2,1,-1,-2}; long long f[25][25]={0}; bool flag[25][25]={0}; int main() { //freopen("pawn.in","r",stdin); //freopen("pawn.out","w",stdout); memset(flag,0,sizeof(flag)); memset(f,0,sizeof(f)); cin>>n>>m>>x>>y; flag[x][y]=1; for(int i=0;i<8;i++) { int d_x=dx[i]+x,d_y=dy[i]+y; if(d_x>=0&&d_x<=n&&d_y>=0&&d_y<=m) { //cout<<d_x<<' '<<d_y<<endl; flag[d_x][d_y]=1; } } for(int i=0;i<=m;i++) { if(flag[0][i])break; f[0][i]=1; } for(int i=0;i<=n;i++) { if(flag[i][0])break; f[i][0]=1; } for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { if(flag[i][j]) { f[i][j]=0; }else f[i][j]=f[i-1][j]+f[i][j-1]; //cout<<i<<' '<<j<<' '<<f[i][j]<<endl; } cout<<f[n][m]<<endl; return 0; }
Pascal :
var a:array[-2..22,-2..22]of int64; m,n,x,y,i,j:integer; begin readln(n,m,x,y); a[0,0]:=1; a[x,y]:=-1; a[x-1,y-2]:=-1; a[x-2,y-1]:=-1; a[x-1,y+2]:=-1; a[x-2,y+1]:=-1; a[x+1,y+2]:=-1; a[x+2,y+1]:=-1; a[x+1,y-2]:=-1; a[x+2,y-1]:=-1; for i:=0 to n do for j:=0 to m do if a[i,j]>=0 then begin if a[i-1,j]>0 then a[i,j]:=a[i,j]+a[i-1,j]; if a[i,j-1]>0 then a[i,j]:=a[i,j]+a[i,j-1]; end; writeln(a[n,m]); end.
- 1
信息
- ID
- 803
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者