簡化版題意:
1~n n個數字,問滿足m個ai=i的排列個數
答案對1e9+7取模
這題就是道裸題,不知道為啥還能是藍的
前置技能一:快速冪(太簡單了不講了 這週和矩陣的知識點一起寫)
前置技能二:錯排公式(顧名思義錯排就是ai!=i的排列個數,高中應該都學過)
下面是推理過程:我們設f[n]代表n個數的錯排結果,我們考慮從n-1個變到n的過程:
對於來的第n個數,我們把它放到第i個位置,那麼i就有兩種情況:
i放到n,此時n-2個數有f[n-2]種情況
i不放到n,此時我們可以把i看成n,那麼剩下這n-1個數有f[n-1] 種情況
i有n-1種選法,所以f[n]=(n-1)*(f[n-1]+f[n-2])
前置技能三:乘法逆元求解:這題俺用的費馬小定理,其他兩種這週也會寫(咕咕咕警告)
這些你都會了
就完事了
#include
#include
#include
#define int long long
using
namespace std;
const
int modd=
1e9+7;
int t,n,m;
int f[
1000005];
int d[
1000005];
int inv[
1000055];
inline
intread()
while
(ch>=
'0'&&ch<=
'9')
return x*f;
}int
ksm(
int a,
int b)
return ans%modd;
}inline
intc
(int x,
int y)
main()
while
(t--
)return0;
}
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 個數錯排的方案數,我們的答案就...
洛谷 4071 SDOI2016 排列計數
題目描述 求有多少種長度為 n 的序列 a,滿足以下條件 1 n 這 n 個數在序列中各出現了一次 若第 i 個數 a i 的值為 i,則稱 i 是穩定的。序列恰好有 m 個數是穩定的 滿足條件的序列可能很多,序列數對 109 7 10 9 7 109 7 取模。輸入格式 第一行乙個數 t,表示有 ...