平面上有一张由整数坐标点构成的网格。你从 (0,0) 出发,要到达 (n,m)。
每一步只能向右或向上移动一个单位,也就是从 (u,v) 移动到 (u+1,v) 或 (u,v+1)。整条路线上的点都必须满足 0\le u\le n、0\le v\le m。
给定一个禁止经过的网格点 (x,y),求有多少条合法路线,并输出路线数量对 1000000007 取模的结果。
起点和终点也算路线经过的点;如果禁点是起点或终点,则没有合法路线。两条路线只要有一步的移动方向不同,就视为不同路线。
输入一行四个整数 n,m,x,y,分别表示终点坐标与禁点坐标。
输出一行一个整数,表示合法路线数量对 1000000007 取模的结果;没有合法路线时输出 0。
3 2 1 1
4
5 4 2 3
86
用 R 表示向右一步,U 表示向上一步。四条合法路线分别为:
RRRUU
RRURU
RRUUR
UURRR
例如,RRURU 对应 (0,0)\to(1,0)\to(2,0)\to(2,1)\to(3,1)\to(3,2),没有经过禁点 (1,1)。
如果前两步是 RU 或 UR,就会经过 (1,1),这样的路线不合法。
不考虑禁点时共有 126 条路线,其中 40 条经过 (2,3),所以合法路线有 86 条。
见题目目录下的 avoid/3.in 与 avoid/3.ans。
该样例满足测试点 3,4 的约束条件。
见题目目录下的 avoid/4.in 与 avoid/4.ans。
该样例满足测试点 7\sim10 的约束条件。
见题目目录下的 avoid/5.in 与 avoid/5.ans。
该样例满足测试点 3,4 的约束条件。
对于所有测试数据,保证 1\le n,m\le1000,0\le x\le n,0\le y\le m。
本题共 10 个测试点,每个测试点 10 分。
| 测试点编号 | n,m 的上界 |
|---|---|
| 1,2 | 20 |
| 3,4 | 200 |
| 5,6 | 500 |
| 7\sim10 | 1000 |
avoid.zip (0.80 KB)