比赛 |
刷题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;
}