洛谷 4071 SDOI2016 排列計數

2021-09-28 20:59:53 字數 1248 閱讀 3413

題目描述

求有多少種長度為 n 的序列 a,滿足以下條件:

1 ~ n 這 n 個數在序列中各出現了一次

若第 i 個數 a[i] 的值為 i,則稱 i 是穩定的。序列恰好有 m 個數是穩定的

滿足條件的序列可能很多,序列數對 109

+7

10^9+7

109+

7 取模。

輸入格式

第一行乙個數 t,表示有 t 組資料。

接下來 t 行,每行兩個整數 n、m。

輸出格式

輸出 t 行,每行乙個數,表示求出的序列數

輸入輸出樣例輸入5

1 01 1

5 2100 50

10000 5000

輸出01

20578028887

60695423

說明/提示

t=500000 ,n≤1000000 ,m≤1000000 。

解釋:答案=cnm

∗d(n

−m

)c_^m*d(n-m)

cnm​∗d

(n−m

)其中d

dd為錯排公式,d(n

)=(n

−1)∗

(d(n

−1)+

d(n−

2)

)d(n)=(n-1)*(d(n-1)+d(n-2))

d(n)=(

n−1)

∗(d(

n−1)

+d(n

−2))

再利用逆元就ok

#include#define mod 1000000007

#define n 1000003

using namespace std;

int t=0;

int n=0,m=0;

long long d[n]=;

long long fact[n]=;

long long inv[n]=;

long long pow(long long a,long long b)

return ret;

}int main()

return 0;

}

洛谷 P4071 SDOI2016 排列計數

簡化版題意 1 n n個數字,問滿足m個ai i的排列個數 答案對1e9 7取模 這題就是道裸題,不知道為啥還能是藍的 前置技能一 快速冪 太簡單了不講了 這週和矩陣的知識點一起寫 前置技能二 錯排公式 顧名思義錯排就是ai i的排列個數,高中應該都學過 下面是推理過程 我們設f n 代表n個數的錯...

P4071 SDOI2016 排列計數

求有多少種長度為 n 的序列 a,滿足以下條件 1 n 這 n 個數在序列中各出現了一次 若第 i 個數 a i 的值為 i,則稱 i 是穩定的。序列恰好有 m 個數是穩定的 滿足條件的序列可能很多,序列數對 109 7取模。輸入格式 第一行乙個數 t,表示有 t 組資料。接下來 t 行,每行兩個整...

題解 P4071 SDOI2016 排列計數

題目鏈結 題目大意 問有多少個 1 n 的排列 a 恰好有 m 個數滿足 a i i 錯排,計數 分析 首先我們選 m 個數有 c n m 種,那麼我們要求答案合法就必須使得剩下的數都不滿足 a i i 也就是我們要求 n m 個數錯排的方案數,假設 d n 表示 n 個數錯排的方案數,我們的答案就...