1. 程式人生 > >[XSY 1501][組合數+分治FFT]

[XSY 1501][組合數+分治FFT]

要是我們能預處理出i-四面體的方案數,那麼我們查詢時分治FFT即可 注意FFT時要預處理單位複數根來保證精度 考慮如何預處理出i-四面體的方案數 我們可以打表得到一個num陣列 num[0]=1 num[1]=12 num[2]=54 num[3]=108 num[4]=81 代表2-四面體去掉i條邊的方案數 那麼我們可以得到k-四面體的方案數(k>=3): i=04numij=max(0,ki)6k12(6k12j)\sum_{i=0}^{4}num_{i}*\sum_{j=max(0,k-i)}^{6*k-12}\binom{6*k-12}{j}

(0,ki)6k12(j6k12) k=1,2時,方案數分別為9,243 我們的問題轉化成了如何對每個k求 i=0k(6k12i)\sum_{i=0}^{k}\binom{6*k-12}{i} 可以輕鬆地o(n)o(n)求出 時間複雜度:O(n+nlog2nlog2n)O(n+nlog_{2}nlog_{2}n)