zoukankan      html  css  js  c++  java
  • 神仙dcx出的一道题

    题目大意

    (;;)在一个坐标系上, 以((0, 0))为起点, 每走一步,可以从((x,y))走到((x+1,y),(x-1,y),(x,y+1),(x,y-1))中的一个点上, 问走(k)步到达((a, b))的方案数。

    题解

    我们发现题目中的移动方式很难处理。

    考虑到题目中的"走一步", 可以理解为:在曼哈顿距离的意义下, 移动一个单位长度的距离。
    那么改成切比雪夫距离下移动一个单位长度的距离, 就变成了:每一步可以从((x, y))走到((x+1, y-1), (x-1, y+1), (x-1, y-1), (x+1, y+1))

    考虑这样一个问题: 在数轴上, 从原点出发, 每次可以向前或向后移动一步, 走(k)步走到(n)的方案数, 显然答案是({k choose (k-n) / 2})

    于是我们可以对横、纵坐标分别这样算一遍, 然后相乘。

    于是我们只用使切比雪夫距离与曼哈顿距离等价就行了, 于是我们可以将原坐标系上的每个点((x, y)), 变成((x + y, x - y)), 这样新坐标系的任意点之间切比雪夫距离与原坐标系的曼哈顿距离就相等了

    于是最终答案就是:({k choose (k-a-b) ;/; 2} imes {k choose (k-a+b) ;/; 2})

  • 相关阅读:
    vmalloc详解
    SSD 页、块、垃圾回收
    ext2文件系统
    slub分配object
    slab分配object
    ACCESS_ONCE的作用
    CFS理论模型
    代码规范
    About Me
    SDOI R2 咕咕记
  • 原文地址:https://www.cnblogs.com/2016gdgzoi509/p/11291407.html
Copyright © 2011-2022 走看看