比赛 刷题ing 评测结果 AAAAAAAAAA
题目名称 过河卒 最终得分 100
用户昵称 WangZoB 运行时间 0.026 s
代码语言 C++ 内存使用 8.02 MiB
提交时间 2018-05-29 10:41:28
显示代码纯文本
#include<bits/stdc++.h>
#define LL long long
#define MAXSIZE 1005
#define INF 0x3f3f3f3f

using namespace std;

int dp[MAXSIZE][MAXSIZE];
int vis[MAXSIZE][MAXSIZE];
int dir[8][2] = {{-1,-2},{-2,-1},{-2,1},{-1,2},{1,-2},{2,-1},{2,1},{1,2}};

bool Check(int x,int y,int n,int m)
{
    if(x<0 || x>n || y<0 || y>m)
        return false;
    return true;
}

int main()
{
    memset(vis,0,sizeof(vis));
    memset(dp,0,sizeof(dp));
    freopen("pj024.in","r",stdin);
    freopen("pj024.out","w",stdout);
    int n,m,x,y;
    scanf("%d%d%d%d",&n,&m,&x,&y);
    vis[x][y] = 1;
    for(int i=0;i<8;i++)
    {
        int nx = x + dir[i][0];
        int ny = y + dir[i][1];
        if(Check(nx,ny,n,m))
            vis[nx][ny] = 1;
    }
    for(int i=1;i<=n;i++)
    {
        if(vis[i][0] == 1)
            break;
        dp[i][0] = 1;
    }
    for(int i=1;i<=m;i++)
    {
        if(vis[0][i] == 1)
            break;
        dp[0][i] = 1;
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(vis[i][j] == 1)
                dp[i][j] = 0;
            else
            {
                dp[i][j] += dp[i-1][j] + dp[i][j-1];
            }
        }
    }
    printf("%d\n",dp[n][m]);
    return 0;
}