題目大意:
有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
ix)
,這個直接分治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條邊...