搜索
热搜: NOIP OIer 神牛
查看: 403|回复: 2

1213,1491,1884 过河卒

[复制链接]

主题

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-12-7 19:55:06 | 显示全部楼层 |阅读模式
题目传送门1213题目传送门1491
题目传送门1491

AC代码:
  1. #include<iostream>
  2. #include<string.h>
  3. #define maxn 10000  //马占有的地方以及能一步到的地方赋为10000
  4. using namespace std;
  5. int main()
  6. {
  7.     int n,m;long int a[21][21];int xm,ym;//xm,ym表示马的坐标
  8.     memset(a,0,sizeof(a));//二维数组元素初始化为0
  9.     cin>>n>>m>>xm>>ym;
  10.     a[xm][ym]=maxn;//马占有的地方赋为maxn
  11.     int i,j;
  12.     for(j=ym-1;j<=ym+1;j+=2)//马能一步到达的坐标赋为maxn
  13.         for(i=xm-2;i<=xm+2;i+=4)
  14.         {
  15.             if(i<0||j<0)
  16.                 continue;
  17.             else
  18.                 a[i][j]=maxn;  
  19.         }
  20.     for(i=xm-1;i<=xm+1;i+=2)//处理马能一步到达的坐标赋为maxn
  21.         for(j=ym-2;j<=ym+2;j+=4)
  22.         {
  23.             if(i<0||j<0)
  24.                 continue;
  25.             else
  26.                 a[i][j]=maxn;
  27.         }

  28.     for(i=n;i>=0;i--)
  29.         for(j=m;j>=0;j--)
  30.         {
  31.             if(a[i][j]==maxn)//马占有的地方不用赋值了
  32.                 continue;
  33.             if(i==n||j==m)//边界处理,由于卒只能往右,往下走,此边界只有一条路
  34.                 a[i][j]=1;
  35.             else if(a[i][j+1]==maxn&&a[i+1][j]==maxn)
  36.                 a[i][j]=maxn;
  37.             else if(a[i][j+1]==maxn&&a[i+1][j]!=maxn)
  38.                 a[i][j]=a[i+1][j];
  39.             else if(a[i][j+1]!=maxn&&a[i+1][j]==maxn)
  40.                 a[i][j]=a[i][j+1];
  41.             else
  42.                 a[i][j]=a[i][j+1]+a[i+1][j];//正常情况
  43.         }
  44. cout<<a[0][0];
  45. }
复制代码


回复

使用道具 举报

主题

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2022-12-7 20:04:04 | 显示全部楼层
题目传送门有点乱自己去OJ搜吧
回复

使用道具 举报

主题

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2023-3-26 09:17:06 | 显示全部楼层
曹浩源 发表于 2022-12-7 20:04
题目传送门有点乱自己去OJ搜吧

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

津ICP备19006949号-1 | 津公网安备12010102000465号

快速回复 返回顶部 返回列表