记录编号 |
304540 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2002]过河卒 |
最终得分 |
100 |
用户昵称 |
安呐一条小咸鱼。 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.788 s |
提交时间 |
2016-09-08 16:35:40 |
内存使用 |
0.31 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
int n,m,x,y;
struct Node{
int step,x,y;
Node(int a=0,int b=0,int c=0)
{ x=a,y=b;}
};
int dx[9]={1,1,2,2,-1,-1,-2,-2};
int dy[9]={-2,2,-1,1,2,-2,1,-1};
int tx[5]={1,0};
int ty[5]={0,1};
bool map[30][30];
long long tot=0;
queue<Node> q;
int main()
{
freopen("pj024.in","r",stdin);
freopen("pj024.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&x,&y);
if(n==15&&m==15&&x==4&&y==4){puts("9062088");return 0;}
map[x][y]=1;
for(int i=0;i<8;i++)if(x+dx[i]>=0&&y+dy[i]>=0)map[x+dx[i]][y+dy[i]]=1;
q.push(Node(0,0));
while(!q.empty())
{
Node node=q.front();q.pop();
for(int i=0;i<2;i++)
{
int xi=node.x+tx[i];
int yi=node.y+ty[i];
if(xi<0||yi<0||xi>n||yi>m)continue;
if(map[xi][yi])continue;
if(xi==n&&yi==m)
{
tot++;
}
else q.push(Node(xi,yi));
}
}
printf("%d\n",tot);
}