1 条题解

  • 0
    @ 2025-12-9 19:43:03

    「FJOI2016」建筑师 题解

    题意

    nn 个建筑,高度是 11nn 的一个排列

    从左看能看到 AA 个,从右看能看到 BB

    求排列方案数 mod109+7\bmod 10^9+7

    核心公式 答案 = C(A+B2,A1)×S(n1,A+B2)C(A+B-2, A-1) × S(n-1, A+B-2)

    其中:

    C(n,k)C(n,k):组合数

    S(n,k)S(n,k):第一类斯特林数(nn 个元素分 kk 个圆排列)

    为什么? 最高建筑(高度 nn)一定被看到

    剩下 n1n-1 个建筑分成 A+B2A+B-2 个"组"(每组以可见建筑开头)

    从这些组中选 A1A-1 个放左边,B1B-1 个放右边

    算法

    预处理 斯特林数 S(n,k)S(n,k)

    递推:S(n,k)=S(n1,k1)+(n1)×S(n1,k)S(n,k) = S(n-1,k-1) + (n-1)×S(n-1,k)

    n50000n≤50000k200k≤200(因为 A,B100A,B≤100

    组合数 C(n,k)C(n,k)

    直接计算或预处理

    查询 O(1)O(1) 计算:C(A+B2,A1)×S(n1,A+B2)modMC(A+B-2, A-1) × S(n-1, A+B-2) \bmod M

    复杂度 预处理:O(n×200)O(n×200) 可接受

    查询:O(1)O(1)T200000T≤200000 可过

    • 1

    信息

    ID
    5955
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    1
    已通过
    1
    上传者