BZOJ4714 旋轉排列

2021-08-19 07:41:57 字數 1285 閱讀 9463

就是對於每個錯排,統計裡面有多少種環長

考慮列舉環長l,可以用容斥計算不含長為l的環的方案數cl

c

l,總數減去cl

c

l就是貢獻 cl

=∑[n

/l]i

=0((

nil)

∏ij=

2(jl

−1l−

1)((

l−1)

!)i)

c l=

∑i=0

[n/l

]((i

ln)∏

j=2i

(l−1

jl−1

)((l

−1)!

)i

)(柿子大概長這樣)

預處理一些東西後就可以o(

nlog

n)o (n

logn

)算了

code:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

using namespace std;

const int maxn = 510000;

const int mod = 1e9+7;

inline void add(int &a,const int &b)

int pw(int

x,int k)

int inv(int

x)int

s[maxn],invs[maxn];

int c(int i,int j)

int g[maxn];

int n;

void pre()

for(int i=0;i<=n;i++) g[i]=(ll)g[i]*s[i]%mod;

}int main()

cc=(g[n]-cc+mod)%mod;

add(ans,cc);

}printf("%d\n",ans);

return

0;}

bzoj4714 旋轉排列

time limit 20 sec memory limit 512 mb submit 74 solved 46 submit status discuss 輸入僅有一行,包含乙個整數n,1 n 500000 輸出一行,包含乙個整數,代表答案。49 樣例解釋 k 2時的方案數為3,k 4時的方案數...

BZOJ4714 旋轉排列

對於每個 k 問題等價於求有多少置換滿足 1.存在乙個迴圈長度為 k 2.任意乙個迴圈長度 geq 2 列舉這種環的個數 t 設 g t 表示至少有 kt 個人分成 t 個長度為 k 的迴圈的方案數,考慮列舉第乙個人和哪些人分在了一起,同時有 k 1 種可能的環,有 g t c kt 1,k 1 g...

LintCode 搜尋旋轉排列陣列

題目 假設有乙個排序的按未知的旋轉軸旋轉的陣列 比如,0 1 2 4 5 6 7 可能成為4 5 6 7 0 1 2 給定乙個目標值進行搜尋,如果在陣列中找到目標值返回陣列中的索引位置,否則返回 1。你可以假設陣列中不存在重複的元素。樣例 給出 4,5,1,2,3 和target 1,返回 2 給出...