比赛 刷题ing 评测结果 AAAAAAAAAA
题目名称 过河卒 最终得分 100
用户昵称 zzz 运行时间 0.018 s
代码语言 C++ 内存使用 2.30 MiB
提交时间 2018-05-29 16:03:34
显示代码纯文本
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stack>
  5. #include <queue>
  6. #include <map>
  7. #include <set>
  8. #include <vector>
  9. #include <math.h>
  10. #include <bitset>
  11. #include <algorithm>
  12. #include <climits>
  13. using namespace std;
  14. #define LL long long
  15. #define N 510
  16. #define mod 1000000007
  17. #define INF 0x3f3f3f3f
  18. #define lson root<<1
  19. #define rson root<<1|1
  20. int dir[8][2] = { {1,2},{1,-2},{-1,2},{-1,-2},{2,-1},{2,1},{-2,-1},{-2,1}};
  21. int dp[N][N],vis[N][N];
  22. int main()
  23. {
  24. freopen("pj024.in","r",stdin);
  25. freopen("pj024.out","w",stdout);
  26. int n,m,x,y;
  27. scanf("%d %d %d %d",&n,&m,&x,&y);
  28. x++,y++;
  29. memset(vis,0,sizeof(vis));
  30. vis[x][y] = 1;
  31. for(int i=0;i<8;i++)
  32. {
  33. int xx = x+dir[i][0];
  34. int yy = y+dir[i][1];
  35. if(xx>=0 && yy>=0)
  36. vis[xx][yy] = 1;
  37. }
  38. memset(dp,0,sizeof(dp));
  39. dp[1][1] = 1;
  40. for(int i=1;i<25;i++)
  41. {
  42. for(int j=1;j<25;j++)
  43. {
  44. if(vis[i][j]) continue;
  45. if(i==1 && j==1) continue;
  46. dp[i][j] = dp[i][j-1] + dp[i-1][j];
  47. }
  48. }
  49. printf("%d\n",dp[n+1][m+1]);
  50. return 0;
  51. }