bzoj4517 錯排 組合)

2022-09-01 13:51:14 字數 1030 閱讀 8578

求有多少種長度為 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 行,每行乙個數,表示求出的序列數

5

1 01 1

5 2100 50

10000 5000

0120

578028887

60695423

設選定的組合為c(m,n)即總在i位置上的數,那麼其餘(n-m)必須全不在其位置上即求錯排數,

由乘法原理的ans=c(m,n)*f(n-m);

組合數公式c(m,n)=n!/m!(n-m)!,

錯排公式為f(n)=f(n-1)*n+(-1)^n;

預處理出組合數與錯排數,最後用乘法逆元計算即可

#include#include

#include

using

namespace

std;

const

int maxn=1000000+10

;const

long

long mod=1e9+7

;long

long

a[maxn],f[maxn];

long

long pow(long

long x,long

long

y)

return ans%mod;

}int

main()

intn,m;

intt;

scanf("%d

",&t);

for (int i=1;i<=t;i++)

return0;

}

BZOJ4517 排列計數(錯排公式)

從開始看這題到現在,已經過了30多把lol的時間了。話說今天又有一道排列計數的題讓我懵逼。題面題意 問有多少長為n的排列a,恰好有m個位置存在a i i。我們列舉這n m個a i i位置,有cm n 種情況。對於x個數的排列,不存在a i i的方案數設為f x 經過簡單的打表可以發現f i f i ...

BZOJ4517 遞推 錯排 排列計數 題解

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

排列計數(bzoj 4517)

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