題解 P4071 SDOI2016 排列計數

2022-05-07 21:15:07 字數 940 閱讀 2202

題目鏈結

題目大意:問有多少個\(1-n\)的排列\(a\)恰好有\(m\)個數滿足\(a_i=i\)

錯排,計數

分析:首先我們選\(m\)個數有\(c_n^m\)種,那麼我們要求答案合法就必須使得剩下的數都不滿足\(a_i=i\),也就是我們要求\(n-m\)個數錯排的方案數,假設\(d_n\)表示\(n\)個數錯排的方案數,我們的答案就是\(c_n^m\times d_\)

關鍵是\(d\)的求法,對於乙個位置\(n\)有兩種可能,前\(n-1\)個位置都錯了,前\(n-1\)個位置有乙個是對的,這兩種情況都可以通過一次交換得到全錯排情況,其它情況不行

因此\(d_n=(n-1)\times(d_+d_)\)

預處理一下階乘及其逆元,和錯排數\(d\)即可

注意當\(n=m\)時答案為\(1\)

#include using namespace std;

const int mod = 1e9 + 7,maxn = 1e6;

typedef long long ll;

ll d[maxn + 100],fac[maxn + 100],facinv[maxn + 100];

inline ll mul(ll a,ll b)

inline ll qpow(ll a,ll b)

return res;

}inline ll inv(ll x)

inline ll c(ll n,ll m)

inline void init()

d[0] = d[2] = 1;

for(int i = 3;i <= maxn;i++)

d[i] = mul(i - 1,d[i - 1] + d[i - 2]);

}int t,n,m;

int main()

P4071 SDOI2016 排列計數

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

洛谷 P4071 SDOI2016 排列計數

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

題解 SDOI2016 征途

link 題目大意 給定序列,將它劃分為 m 段使得方差最小,輸出 s 2 m 2 乙個整數 text 這題我通過題解中的大佬部落格學到了一般化方差柿子的寫法。下面來推柿子 s 2 frac n x i overline 2 frac sum n x i 2 n frac n x i 2 2 sum...