4517 Sdoi2016 排列計數

2021-08-08 09:24:42 字數 970 閱讀 5101

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

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

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

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

題解:序列裡任意m個數穩定都是等價的,考慮不穩定的那幾個就是裸錯排

錯排問題的遞推式f[n]=(f[n-1]+f[n-2])*(n-1)。

我們考慮這n個人中編號最小的人i,設他站到了j號位置。

1.如果j號人站到了i號位置,問題轉化成乙個n-2的錯排問題。

2.如果j號人沒有站到i號位置,那麼除去i號人所有人都站錯了,問題轉化成乙個n-1的錯排問題。

**:

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

#define mod 1000000007

#define ll long long

const int n=1000010;

ll t;

ll n,m;

ll fac[n],ine[n],f[n];

int main()

for(ll i=2;i<1000001;i++)ine[i]=(ine[i]*ine[i-1])%mod;

f[0]=1;

f[1]=0;

f[2]=1;

for(ll i=3;i<=1000000;i++)

f[i]=((i-1)*(f[i-1]+f[i-2]))%mod;

scanf("%lld",&t);

while(t--)

}

4517 Sdoi2016 排列計數

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 ...

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...