1 条题解

  • 0
    @ 2025-2-14 21:20:41

    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
    上传者