4517 Sdoi2016 排列計數

2021-07-25 11:32:57 字數 1289 閱讀 8770

time limit: 60 sec  

memory limit: 128 mb

submit: 907  

solved: 563 [

submit][

status][

discuss]

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

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

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

滿足條件的序列可能很多,序列數對 10^9+7 取模。

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

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

t=500000,n≤1000000,m≤1000000

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

51 0

1 15 2

100 50

10000 500001

20578028887

60695423

鳴謝menci上傳 [

submit][

status][

discuss]

要滿足恰有m個位置a[i] == i,那麼說明剩下n - m個位置a[i] != i,這不就是乙個組合數和乙個錯排?

所以ans = c(n,m)*f[n-m]   f[i]:長度為i的錯排方案

錯排公式,,f[i] = (f[i-1] + f[i-2])*(i-1)

#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

const int maxn = 1e6 + 10;

const int n = 1000000;

typedef long long ll;

const ll mo = 1000000007;

int t,f[maxn],fac[maxn],inv[maxn];

int add(const ll &x,const ll &y)

int mul(const ll &x,const ll &y)

int ksm(int x,int y)

return ret;

}int c(int n,int m)

int main()

return 0;

}

4517 Sdoi2016 排列計數

求有多少種長度為 n 的序列 a,滿足以下條件 1 n 這 n 個數在序列中各出現了一次 若第 i 個數 a i 的值為 i,則稱 i 是穩定的。序列恰好有 m 個數是穩定的 滿足條件的序列可能很多,序列數對 10 9 7 取模。題解 序列裡任意m個數穩定都是等價的,考慮不穩定的那幾個就是裸錯排 錯...

bzoj4517 sdoi2016 排列計數 錯排

題目大意 給定n,m。求排列個數,排列滿足 1 是全排列的一種。2,有且僅有m個數a i i。嗯,今天 第一次 聽說了個錯排這個東西。誒。不過開心,smz妹子給我講噠 錯排就是求n的排列個數,排列滿足不存在a i i。可以遞推來完成。f i i 1 f i 1 f i 2 證明 第i個元素可以選擇和...

bzoj 4517 Sdoi2016 排列計數

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