[CEOI2010 day2] tower
题目背景
古巴比伦人决定建造一座塔。
题目描述
这座塔共有 n n n 层,每层由一个边长为 a i a_i ai 的立方体石块构成。一个石块 i i i 能够直接放在石块 j j j 上当且仅当 a i ≤ a j + D a_i \leq a_j+D ai≤aj+D,其中 D D D 为一个给定的常数。
你需要求出如果使用全部的石块,有多少种不同的搭建方案。输出答案 m o d 1 0 9 + 9 \bmod\ 10^9+9 mod 109+9 的结果。
注意:即使两个石块的边长相同,也看做不同的石块。
输入格式
输入第一行两个整数 n , D n,D n,D。
第二行 n n n 个整数 a 1 , … , a n a_1,\dots,a_n a1,…,an,表示每个立方体石块的边长。
输出格式
输出一行一个整数,表示方案总数 m o d 1 0 9 + 9 \bmod\ 10^9+9 mod 109+9 的结果。
样例 #1
样例输入 #1
4 1
1 2 3 100
样例输出 #1
4
样例 #2
样例输入 #2
6 9
10 20 20 10 10 20
样例输出 #2
36
提示
【样例解释】
样例 1 解释
首先把边长为
100
100
100 的石块放在底部,其余的石块可以任意顺序放置,除了以下两种情况:2,1,3
1,3,2
。
样例 2 解释
首先不允许在 10 10 10 上面放 20 20 20。
所以就把 20 20 20 一堆放在底下, 10 10 10 一堆放在上面。
即 ( 3 ! ) × ( 3 ! ) = 36 (3!)\times (3!)=36 (3!)×(3!)=36。
【数据规模与约定】
- 对于 10 % 10\% 10% 的数据,保证 n ≤ 10 n\le 10 n≤10;
- 对于 30 % 30\% 30% 的数据,保证方案数不超过 1 0 6 10^6 106;
- 对于 45 % 45\% 45% 的数据,保证 n ≤ 20 n\le 20 n≤20;
- 对于 70 % 70\% 70% 的数据,保证 n ≤ 70 n\le 70 n≤70;
- 对于 100 % 100\% 100% 的数据,保证 2 ≤ n ≤ 6.2 × 1 0 5 2\le n\le 6.2\times 10^5 2≤n≤6.2×105,输入中所有数字为不超过 1 0 9 10^9 109 的正整数。
【说明】
题目译自 CEOI 2010 day 2 T3 tower。
翻译版权为题目提供者 @ShineEternal 所有,未经许可禁止转载。
Scratch实现
后续
接下来我会不断用scratch来实现信奥比赛中的算法题、Scratch考级编程题实现、白名单赛事考题实现,感兴趣的请关注,我后续将继续分享相关内容