幾何 組合數學 分治FFT 分塊

2021-08-28 18:45:54 字數 2766 閱讀 3027

題目大意:

有n個正四面體,第k個邊長是k個木棍。想要摧毀第k個正四面體,當且進當移除了至少k個正四面體,以及四個結點至少是兩條邊的段點。現在要摧毀至少m個正四面體,問方案數,不考慮順序和空間同構,n

≤60000,p

=105

+3

n\le60000,p=10^5+3

n≤6000

0,p=

105+

3。p為模數,5組詢問。

題解:首先摧毀第k(k

>1)

k(k>1)

k(k>1)

個的方案數是:

a ns

k=∑t

=04(

4t)3

t∑i=

k−t6

k−12(

6k−12

i)

ans_k=\sum_^4\binom 4t3^t\sum_^\binom

ansk​=

t=0∑

4​(t

4​)3

ti=k

−t∑6

k−12

​(i6

k−12

​)考慮只要知道t=0

t=0t=

0的情況就能o(1

)o(1)

o(1)

算出其餘情況,後辦部分是在求組合數字尾和,轉為2的冪次減去字首和,問題轉問求:

b k=

s(6k

,k+1

)∑i=

0k+1

(6ki

)b_k=s(6k,k+1)\sum_^\binom

bk​=s(

6k,k

+1)i

=0∑k

+1​(

i6k​

)其實這非常好做,因為:s(n

,k)=

2s(n

−1,k

)−(n

−1k)

s(n,k)=2s(n-1,k)-\binom

s(n,k)

=2s(

n−1,

k)−(

kn−1

​),因此你可以爆算6次轉移。

算出來這個東西之後答案就是∑k=

mn[x

k]∏i

=1n(

1+an

six)

\sum_^n\left[x^k\right]\prod_^n (1+ans_ix)

∑k=mn​

[xk]

∏i=1

n​(1

+ans

i​x)

,這個直接分治fft即可。

但是由於本人太懶,加上本題時限較大,所以寫了個分塊優化空間的o(n

2)

o\left(n^2\right)

o(n2

)做髮並得到了100pt

s100\mathrm

100pts

的好成績。

#include

#define rep(i,a,b) for(int i=a;i<=b;i++)

#define lint long long

#define mod 100003

#define n 60060

#define bc n

#define gc getchar()

#define debug(x) cerr<<#x<<"="<#define sp <<" "

#define ln inline

intinn()

int f[10]

,ans[n]

,mi[

6*n]

,fac[

6*n]

,facinv[

6*n]

,b[n]

,fk[10]

;inline

intfast_pow

(int x,

int k,

int ans=1)

inline

intprelude

(int n)

inline

intc

(int n,

int m)

vector<

int> pf[n]

,s[bc]

,v;lint w[n]

;int l[bc]

,r[bc]

,bel[n]

;inline

inttms

(vector<

int>

&a,vector<

int>

&b,vector<

int>

&c)int dp[

1010][

1010];

intmain()

rep(k,

5,n)

int sz=

(int

)sqrt

(n+0.5

),bc=

(n-1

)/sz+1;

for(

int i=

1;i<=bc;i++

) s[i]

=pf[r[i]];

if(i>1)

tms(s[i-1]

,s[i]

,s[i]);

}int t,x,k,bl;

scanf

("%d"

,&t)

;while

(t--

)return0;

}

組合數學 求組合數

對於求組合數,要根據所給資料範圍來選擇合適的演算法 這道題中所給的資料範圍適合用打表的方法直接暴力求解 先用4e6的複雜度預處理出所有的情況,再用1e4的複雜度完成詢問即可 include using namespace std const int n 2010 const int mod 1e9 ...

數學 組合數學

mod must be a prime const int mod 1e9 7 namespace combinatory ll inv ll x ll fac maxn invfac maxn void initc int n ll a ll n,ll m ll c ll n,ll m ll d ...

XSY 1501 組合數 分治FFT 幾何

要是我們能預處理出i 四面體的方案數,那麼我們查詢時分治fft即可 注意fft時要預處理單位複數根來保證精度 考慮如何預處理出i 四面體的方案數 我們可以打表得到乙個num陣列 num 0 1 num 1 12 num 2 54 num 3 108 num 4 81 numi代表2 四面體去掉i條邊...