本文用於總結各類奇怪的姿式,僅供我的學習,有的地方可能直接引用原文,並沒有冒犯之意html
0.作題想到思路以後先去證實!實在不會證實去找反例!找不出反例再看幾遍題目!肯定沒問題了再去敲代碼!數組
1.主席樹空間儘可能往大了開網絡
2.LCT的splay維護鏈信息下傳加法標記的時候要維護size,不然加法標記下傳會出問題app
3.LCT的isroot判斷的是該點是不是splay中的根!不是原樹的根!函數
4.splay的pop以後記得pushup學習
5.點分時遞歸找根的時候這樣寫\(size=sz[v]>sz[rt]?totsz-sz[rt]:sz[v],rt=0;\)ui
upd:然而通常的寫法並不會退化因此實際上不用這樣寫spa
6.看到棋盤先黑白染色冷靜一下指針
7.最少須要多少能夠轉化爲最多能拿走多少再轉化爲最大流code
8.混合圖求歐拉回路->這裏
9.最小割樹->這裏
10.手動模擬隊列的時候隊列大小要開節點被訪問的次數而不是節點個數!!
11.整數機率公式\[E(x)=\sum_{i=1}^\infty P(x\geq i)\]
即\(x\)取值的指望等於它大於等於某數的機率之和
證實以下:\[E(x)=\sum_{i=1}^\infty i*P(i)\]
這是指望的定義
\[E(x)=\sum_{i=1}^\infty i*(P(x\geq i)-P(x\geq i+1))\]
而後把上式一項一項展開以後,合併同類項可得\[E(x)=\sum_{i=1}^\infty P(x\geq i)\]
12.考慮一個下標從\(0\)開始的數列,這個數列的每一個數均爲\(1\)。 咱們對這個數列作\(k\)階前綴和,獲得的數列第\(i\)項的值爲\(C_{k+i}^k\)
若是對一個區間\([l,r]\)每個數字加上\(1\),至關於它的一階差分的更改。由於差分和前綴和互爲逆運算,設\(cha[i][j]\)表示\(i\)階差分的第\(j\)位,那麼上面的區間加能夠看作是\(cha[1][l]++\),\(ch[i][r+1]--\)(1能夠看作是\(C_{0+i-l}^0\))。同理,推廣到區間\([l,r]\)中的數\(a_i\)加上\(C_{k+i-l}^{k}\)能夠看作是它的\(cha[k+1][l]++\),\(cha[k+1][r+1]--\)。然而這樣還不夠,咱們以前假設是區間所有爲\(1\),才能\(k\)階前綴和後有如上的性質。而如今進行了這兩個操做,一階前綴和後只有\([l,r]\)區間全都是\(1\),也就是說再繼續前綴和下去也只有這個區間會知足上面的性質,也就知足咱們要求的區間加。然而\(r+1\)及後面會加上一些不應加的東西。因而咱們還得對\(1\leq i\leq k\)階差分的第\(r+1\)項作一下修改,也就是減去該階差分數組的前綴和,即\(C_{k-i+1+r-l}^{k-i+1}\)(爲何是這個手推一下,很難表述啊……)
代碼長這樣(dec是減)
while(m--){ int l=read(),r=read(),k=read(); cha[k+1][l]++,cha[k+1][r+1]--; for(int i=k;i;--i) cha[i][r+1]=dec(cha[i][r+1],C[k-i+1+r-l][k-i+1]); }
13.\(i\)個節點的帶標號連通圖的個數(枚舉\(1\)所在的連通塊中有多少點,容斥減去不合法的)\[f_i=2^{\dbinom{i}{2}}-\sum_{j=1}^{i-1}2^{\dbinom{i-j}{2}}\dbinom{i-1}{j-1} f_j\]
14.不要何時都用線段樹常數太大了並且空間太炸,多想一想樹狀數組,哪怕是須要查詢\([i-k,i+k]\)之類的也能夠預處理以後離散化,若是\(k\)是詢問時纔給的能夠每一次讀進來在lower_bound或upper_bound
15.手打隊列的時候空間開大開大開大,實在不行的話用STL或者讓頭尾指針對\(n\)取模
16.題目要求取模的話,加減乘除都要取模
17.若是有的題目不保證正解與樹有關,而口胡出的作法須要dfs整棵樹,仍是手動模擬深搜比較好,防止爆棧
18.對於能夠化成\(b-a|k\)的約數條件,考慮化成\(b\equiv a\pmod{k}\)
19.\(n!\)中質因子\(2\)的個數等於\(n\)減去\(n\)的二進制表示中\(1\)的個數。
20.枚舉子集的時候若是直接暴力枚舉是\(O(m*3^n)\)的(一共有\(m\)個數且每一個數二進制有\(n\)位),按一下兩種看不懂的寫法是\(O(m*2^n)\)
for (int i=1;i<=m;i++) { scanf("%d",&x); s[x]++; } for (int i=0;i<n;i++) for (int j=1;j<=(1<<n)-1;j++) if (j&(1<<i)) s[j^(1<<i)]+=s[j];
for(rint i=1;i<=m;++i)x=read(),++cnt[x]; for (int len = 2; len <= (1 << n); len <<= 1) { for (int i = 0; i <= lim; i += len) for (int j = i, k = i + len / 2; k < i + len; j++, k++) cnt[j] += cnt[k]; }
21.判斷一個數的因子(能夠用屢次也能夠不用)加起來可否等於另外一個數\(n\),首先只有質因子有用。質因子只有一個直接判斷,兩個用exgcd解,三個的話,那麼把最小質因子\(x\)提出來,剩下的數確定能構成形如\(T\equiv n\pmod{x}\)的狀況,只要構成的\(T\)小於等於\(n\)確定能加上一些\(x\)使其成立。因此只要在模意義下,將每一個點\(u\)向\(u+c_i\)連邊(\(c_i\)爲除最小質因子以外的其餘質因子),跑最短路,那麼從\(0\)到\(n\ mod\ x\)的最短路就是所求的\(T\),判斷它是否小於等於\(n\)便可
22.統計某一個數二進制最低位的\(1\)在第幾位
for(rint i=1;i<lim;++i)lst[i]=(i&1)?1:lst[i>>1]+1;
23.一種奇特的BFS方法,適用於點特別少的時候,其中\(s\)表示須要達到的狀態,\(Q\)中的每一位表示該位是否在隊列中,\(vis\)表示該位是否被訪問,\(lst\)表示該狀態下二進制最低的\(1\)的位置(即上面那個),\(ct\)表示該狀態的代價。若是可以從一開始不斷枚舉到最終狀態,說明該方案可行
int vis=0,Q=s&-s; while(Q){ int c=lst[Q]; vis|=1<<c-1,Q^=1<<c-1,Q|=f[c]&s&~vis; } if(vis==s&&ct[ans]>ct[s])ans=s;
24.若三點在某一條通過原點的直線上的投影中心對稱,設三點座標分別爲\((x_a,y_a),(x_b,y_b),(x_c,y_c)\),則\((y_a+y_c-2*y_b,-x_a-x_c+2*x_b)\)爲該直線上一點,其中\(B\)點的投影爲對稱中心
25.有關樹的路徑的問題能夠考慮兩端的取值範圍,用dfs序轉化爲矩陣覆蓋的問題
26.寫讀優的時候最後不要忘了返回resf,不要忘記f,不然會致使讀入負數掛掉
27.有向圖中的最小平均權值迴路->這裏
28.求\(1\)到\(n\)的異或和\(O(1)\)
inline int calc(R int n){int t=n&3;return t&1?(t/2^1):(t/2^n);}
29.\(Min-Max\)容斥
設\(max(S)\)爲集合\(S\)中最大值,\(min(S)\)爲集合中最小值,\(|S|\)爲集合的元素個數,則有
\[max(S)=\sum_{T\subseteq S}(-1)^{|T|+1}min(T)\]
\[min(S)=\sum_{T\subseteq S}(-1)^{|T|+1}max(T)\]
以第一個等式爲例,假設集合中元素兩兩不一樣(有相同的能夠經過加上\(eps\)擾動,反正最大最小值不會變),設元素\(b\)的排名爲\(k\),那麼\(min(T)=b\)當且僅當\(T\)爲後面的\(n-k\)個元素的集合的子集加上\(b\),那麼後面那些元素的子集共有\(2^{n-k}\)個,其中集合大小爲奇數和爲偶數的都有\(2^{n-k-1}\)個,兩兩相消就都變成\(0\)了。只有在\(b\)的排名爲\(n\)的時候不知足,此時這個集合\(T=\{b\}\),\(min(T)\)天然等於\(b\)。因而咱們發現整個集合裏只有最大的元素會有貢獻,其餘全都沒了,證畢
第二個等式同理
\(Min-Max\)容斥對指望一樣成立
拓展\(Min-Max\)容斥\[\max_k(S)=\sum_{T\subseteq S}(-1)^{|T|-k}{|T|-1\choose k-1}min(T)\]
\[\min_k(S)=\sum_{T\subseteq S}(-1)^{|T|-k}{|T|-1\choose k-1}max(T)\]
以第一個等式爲例,對於第\(p\)大元素\(v\),若是\(p<k\)貢獻爲\(0\),那麼\(min(T)=v\)當且僅當集合是由\(v\)以及後面的元素的子集加上\(v\),貢獻爲\[\sum_{i=1}^p{p-1\choose i-1}(-1)^{i-k}{i-1\choose k-1}\]
即枚舉集合大小,而後加上貢獻,其中\({p-1\choose i-1}\)表示大小爲\(i\)且\(min(T)=v\)的集合個數
上式能夠改寫成\[\sum_{i=1}^p(-1)^{i-k}{p-1\choose k-1}{p-k\choose i-k}\]
原式能夠當作從\(p-1\)個數中選\(i-1\)個再從\(i-1\)箇中選\(k-1\)個,改爲從\(p-1\)個數中選\(k-1\)在從剩下的數中選剩下的\((i-1)-(k-1)=i-k\)個
\({p-1\choose k-1}\)是常數,提到前面以後剩下的就是個裸的容斥係數了,當\(p=k\)時爲\(1\),不然爲\(0\)
證畢
30.離散隨機變量的幾何分佈
若是有一個離散型隨機變量\(X\),知足\[P(X==k)=(1-p)^{k-1}p\]
其中\(p\)是一個常數,那麼稱\(X\)服從以\(p\)爲參數的幾何分佈
而後關於服從幾何分佈的隨機變量的指望\[E(X)=\sum i*P(x==i)\]
\[E(X)=p\sum i*(1-p)^{i-1}\]
這是一個等比*等差數列的求和公式,運用高中數學姿式可得\[E(x)=p\frac{1}{p^2}=\frac{1}{p}\]
31.循環卷積->這裏(\(k\)進制下不進位加法)
32.一個可重集合\(S\)中任取一個子集\(T\),記其中全部元素的異或和爲\(x\),那麼\(x\)取到全部能取到的值的機率是相等的
證:設\(n=|S|\),\(S\)中線性基的大小爲\(Base\),咱們考慮在那些不在線性基中的元素取數,共有\(2^{n-Base}\)中取法,對於每一種取法取到的值\(x\),線性基中有惟一對應的取法取到\(x\),因此在線性基中取數使得全部元素異或和爲\(0\)的方案數是\(2^{n-Base}\)
\(x\)能取到的每個值\(v\)均可以被線性基中的元素惟一表示,記爲\(L\),全部使異或和\(x\)爲\(v\)的集合必定是形如\(L\)異或上元素異或和爲\(0\)的集合\(T\),因此個數取到每一個\(v\)的方案數都是\(2^{n-Base}\),因此機率相等
33.對於樹的直徑(考慮點數),若是直徑爲奇數,全部直徑有同一個中點,若是直徑爲偶數,全部直徑有同一條最中間的邊
34.\(n\)個節點的徹底圖的生成樹個數爲\(n^{n-2}\)->證實
35.斐波那契數列的前綴和\(S(n)=f(n+2)-1\)
證實:當\(n=1\)時顯然成立
假設當\(1~n-1\)時成立,那麼\(S(n)=S(n-1)+f(n)=f(n+1)+f(n)-1=f(n+2)-1\)
綜上,原命題成立
36.當\(p\)爲質數時,有\[\prod_{i=1}^p(x+i)\equiv x(x^{p-1}-1)\pmod{p}\]
證:對於\(\prod_{i=1}^p(x+i)\),在模\(p\)意義下有且僅有\(p\)個根\(0,1,2,...,p-1\)
根據費馬小定理,對於\(0<x<p\),\(x^{p-1}\equiv 1\pmod{p}\)恆成立,因此\(x(x^{p-1}-1)\)也有且僅有\(p\)個根\(0,1,2,...,p-1\)
由於\(Z_p[x]\)是惟一分解整環(咱也不知道這是個啥),因此這兩個多項式相等
37.任意長度的\(DFT\)
考慮\(DFT\),有
\[\begin{align*} y_k &= \sum_{i = 0}^{n - 1} a_i \omega_n^{ki}\\ &= \sum_{i = 0}^{n - 1} a_i \omega_{2n}^{-(k - i)^2 +k^2+i^2}\\ &= \omega_{2n}^{k^2} \sum_{i = 0}^{n - 1} a_i \omega_{2n}^{i^2} \times \omega_{2n}^{-(k - i)^2} \end{align*}\]
和式是個卷積,能夠用\(FFT\)計算
簡單來講就是能夠用卷積來計算\(DFT\)
38.合併兩棵樹時,設\(a,b\)爲\(A\)的直徑的兩個端點,\(c,d\)爲\(B\)的直徑的兩個端點,那麼新的樹的直徑必定是\(ab,ac,ad,bc,bd,cd\)中的一個
證實:新樹的直徑必定是原樹的直徑或一條通過\((u,v)\)的鏈(其中\((u,v)\)爲新加的邊),這條通過\((u,v)\)的鏈確定是\(A\)中離\(u\)最遠的點到\(u+(u,v)+v\)到\(B\)中離\(v\)最遠的點,感性理解一下易知,其中前者必爲\(a\)或\(b\),後者必爲\(c\)或\(d\)
39.特徵值與特徵向量
若是等式\[(\lambda E-A)v=0\]
則稱\(\lambda\)爲矩陣\(A\)的特徵值,\(v\)爲矩陣\(A\)的特徵向量
以及兩個結論:
①.若是大小爲\(n\)的矩陣\(A\)滿秩(即行列式不爲\(0\)),則\(A\)有\(n\)組線性無關的特徵向量
②.若是\(Det(\lambda E-A)=0\),則存在\(v\)使等式成立,不然不存在
40.\(Cayley-Hamilton\)定理
當\(A\)滿秩時,下列等式恆成立
\[\prod_{k}(\lambda_{k} E-A)=0\]
其中\(\lambda_{k}\)表示\(A\)的第\(k\)個特徵值
直接證實它爲\(0\)很難,咱們能夠考慮證實任意向量乘上它爲\(0\)
由於它的\(n\)組特徵向量線性無關,因此任意向量均可以被這\(n\)組特徵向量表示,那麼只要證實任意特徵向量乘上它爲\(0\)便可
首先,咱們證實這玩意兒知足交換律
\[(aE-A)(bE-A)=abE^2-aEA-bEA+A^2=(bE-A)(aE-A)\]
那麼就能夠把裏面的給提出來
\[v_i\prod_{k}(\lambda_{k} E-A)=v_i(\lambda_{i} E-A)\prod_{k\neq i}(\lambda_{k} E-A)=0\]
41.\(\prod_{k}(\lambda_{k} E-A)\)和\(f(\lambda)=Det(\lambda E-A)\),把它們看作兩個多項式的話,那麼這兩個多項式的係數相等
大概能夠這麼理解,方程\[\prod_{k}(\lambda_{k} E-A)=0\]
的解爲\(A\)的\(n\)個特徵值,因此這個多項式的係數能夠寫成\(f(x)=\prod_{k}(\lambda_i-x)\),後面那個多項式的解也是\(A\)的\(n\)個特徵值,因此係數也能夠寫成這樣的形式。因此這兩個多項式係數相等
42.\[\ln(1-x^i)=-\sum_{j=1}^{\infty}\frac{x^{ij}}{j}\]
證實以下
\[\ln F(x)=G(x)\\\frac{F'(x)}{F(x)}=G'(x)\\\frac{-ix^{i-1}}{1-x^i}=G'(x)\\-\sum_{j=0}^{\infty} ix^{i-1+ij}=G'(x)\\-\sum_{j=0}^{\infty}\frac{ix^{i+ij}}{i+ij}=G(x)\\-\sum_{j=1}^{\infty}\frac{x^{ij}}{j}=G(x)\]
43.\[\sum_{i=1}^n i[\gcd(i,n)=1]={\varphi(n)\times n+[n=1]\over 2}\]
\(n=1\)時顯然成立
若\(n\neq 1\),由於\([(n,i)=1]\Longrightarrow [(n-i,i)=1]\)
\[ \begin{align} 2\sum_{i=1}^n i[\gcd(i,n)=1] &=\sum_{i=1}^n i[\gcd(i,n)=1]+\sum_{i=1}^n i[\gcd(n,n-i)=1]\\ &=\sum_{i=1}^n i[\gcd(i,n)=1]+\sum_{i=1}^n n-i[\gcd(n,i)=1]\\ &=\sum_{i=1}^n n[\gcd(i,n)=1]\\ &=n\varphi(n)\\ \end{align} \]
44.\[\sigma_1(ij)=\sum_{p|i}\sum_{q|j}[\gcd(p,q)=1]{pj\over q}\]
其中\(\sigma_1(i)\)表示\(i\)的因子的和
咱們分別考慮每個質因子\(d\),設\(i\)中\(d\)的次數爲\(a\),\(j\)中\(d\)的次數爲\(b\),若是\(d\mid p\)且\(d\nmid q\),那麼\({pj\over q}\)能夠取遍\(d^{b+1}\)到\(d^{b+a}\)之間的全部次數,不然若是\(d\nmid p\)且\(d\mid q\),\({pj\over q}\)能夠取遍\(d^{0}\)到\(d^b\)之間的全部次數,綜上\(d\)能夠取遍全部的次數,因此全部的數都會被統計到
45.\(\begin{align} \sum_{i=1}^n i\left\lfloor\frac n i\right\rfloor=\sum_{i=1}^n\sigma_1(i) \end{align}\)
由於\(\left\lfloor\frac n d\right\rfloor\)的實際意義就是\(\le n\)的全部數中是\(i\)的倍數的數的個數(可用於\(\sigma_1\)的快速求和)
46.指數型生成函數形如
\[G(x) = a_0 + a_1x + a_2\frac{x^2}{2!} + a_3\frac{x^3}{3!} + a_4\frac{x^4}{4!} + \dots = \sum\limits_{i = 0}^{\infty} a_i\frac{x^i}{i!}\]
對於兩個指數型生成函數\(F(x)\)和\(G(x)\)的卷積有
\[ \begin{aligned} F(x) \centerdot G(x) &= (\sum\limits_{i = 0}^{\infty} a_i \frac{x^i}{i!})(\sum\limits_{i = 0}^{\infty} b_i \frac{x^i}{i!}) \\ &= \sum\limits_{n = 0}^{\infty} (\sum\limits_{i = 0}^{\infty} \frac{a_ix^i}{i!} \centerdot \frac{b_{n - i}x^{n - i}}{(n - i)!})x^n \\ &= \sum\limits_{n = 0}^{\infty} (\sum\limits_{i = 0}^{\infty} {n \choose i} a_i b_{n - i}) \frac{x^n}{n!} \end{aligned} \]
上面的式子意思就是,若是\(F(x)\)中\(x^i\)的係數表示從\(F\)的全部物品中選擇\(i\)個的排列個數,\(G(x)\)同理,那麼\(F\times G\)中的第\(x^i\)項的係數就表明從\(F\)和\(G\)中共選\(i\)個物品的排列數(考慮裏面,假設\(F\)選了\(i\)個物品,\(G\)選了\(j\)個物品,那麼一個新的排列就是把它們合起來,並保證\(i\)個物品之間的相對順序不變,\(j\)個物品的相對順序也不變,方案數就是\({i+j\choose i}\))
47.設知足性質\(A\)的集合爲\(S_A\),集合有標號,並設\(S_B\)爲若干個\(S_A\)構成的一個大集合
設\(a_i\)爲大小爲\(i\)的\(S_A\)的個數,\(b_i\)爲大小爲\(i\)的\(S_B\)的個數,那麼\(S_A\)和\(S_B\)的指數型生成函數分別爲
\[A(x)=\sum_{i=0}^\infty a_i{x^i\over i!}\]
\[B(x)=\sum_{i=0}^\infty b_i{x^i\over i!}\]
考慮\(S_B\)由多少個\(S_A\)構成,又由於選出的\(S_A\)是無序的因此要乘上一個\(i!\),因而有
\[B(x)=\sum_i\frac{A^i(x)}{i!}=e^{A(x)}\]
比方說\(A(x)\)表明全部的無向連通圖的生成函數,\(B(x)\)表示全部的無向圖的生成函數,那麼有\(B(x)=e^{A(x)}\)
48.假設一個邊集\(T\)對應的森林有k個聯通塊,第 \(i\) 個聯通塊的大小是 \(a_{i}\) ,那麼咱們斷言
\[C(T)=N^{k-2}\prod_{i=1}^{k}a_{i}\]
其中 \(C(T)\) 表示含有\(T\)這個集合的邊的樹的個數
證實的話咱們採起矩陣樹定理+手玩行列式的方法來證實它
固然咱們須要先構造出一張圖來,具體點來說咱們將第i個聯通塊當中的點縮成一個點i,而後咱們在點i和點j之間鏈接 \(a_{i}a_{j}\) 條重邊,這樣造成的圖的生成樹個數就是邊集包含 \(T\) 的樹的個數,(應該很好理解這樣作爲何是對的,本身畫畫圖就明白了)
那麼這樣建出來圖的基爾霍夫矩陣應該長這樣
\[\left[\begin{matrix}a_{1}(n-a_{1}) & -a_{1}a_{2} & \cdots& -a_{1}a_{k} \\ -a_{2}a_{1} & a_{2}(n-a_{2}) & \cdots & -a_{2}a_{k} \\ \vdots & \vdots & \ddots & \vdots \\ -a_{k}a_{1} & -a_{k}a_{2} & \cdots & a_{k}(n-a_{k}) \end{matrix} \right]\]
而後咱們刪去一行一列以後會變成這樣
\[\left[\begin{matrix}a_{1}(n-a_{1}) & -a_{1}a_{2} & \cdots& -a_{1}a_{k-1} \\ -a_{2}a_{1} & a_{2}(n-a_{2}) & \cdots & -a_{2}a_{k-1} \\ \vdots & \vdots & \ddots & \vdots \\ -a_{k-1}a_{1} & -a_{k-1}a_{2} & \cdots & a_{k-1}(n-a_{k-1}) \end{matrix} \right]\]
接下來咱們將第 \(i\) 行除去 \(a_{i}\) 這樣最終的行列式須要乘上一個 \(\prod_{i=1}^{k-1}a_{i}\) ,矩陣會變成這樣
\[\left[\begin{matrix}(n-a_{1}) & -a_{2} & \cdots& -a_{k-1} \\ -a_{1} & (n-a_{2}) & \cdots & -a_{k-1} \\ \vdots & \vdots & \ddots & \vdots \\ -a_{1} & -a_{2} & \cdots & (n-a_{k-1}) \end{matrix} \right]\]
而後咱們將第2列到第k-1列加到第1列上,會獲得
\[\left[\begin{matrix}a_{k} & -a_{2} & \cdots& -a_{k-1} \\ a_{k} & (n-a_{2}) & \cdots & -a_{k-1} \\ \vdots & \vdots & \ddots & \vdots \\ a_{k} & -a_{2} & \cdots & (n-a_{k-1}) \end{matrix} \right]\]
接下來咱們用第1行去減其餘的行,會獲得
\[\left[\begin{matrix}a_{k} & -a_{2} & \cdots& -a_{k-1} \\ 0 & n & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & n \end{matrix} \right]\]
這樣矩陣就被咱們削成了一個上三角陣,它的行列式是 \(n^{k-2}a_{k}\) 乘上 \(\prod_{i=1}^{k-1}a_{i}\) 就是
\[n^{k-2}\prod_{i=1}^{k}a_{i}\]
這樣咱們就證實了咱們的式子是正確的
49.\[x^n-y^n=(x-y)(x^{n-1}+x^{n-2}y+x^{n-3}y^2+...+y^{n-1})\]
證實:當\(x=y\)時等式爲\(0\),故原式含有因式\((x-y)\)
\[ x^n-y^n=(x^n-x^{n-1}y)+(x^{n-1}y-x^{n-2}y^2)+...+(xy^{n-1}-y^n) \]
而後每一項都提出一個公因式\((x-y)\)便可得證
50.\[{1\over k}\sum_{i=0}^{k-1}\omega^{in}_k=[k|n]\]
直接等比數列求和公式帶進去就好了
51.Simpson公式\[\int_a^bf(x)dx\approx\frac{(b-a)(f(a)+f(b)+4f(\frac{a+b}{2}))}{6}\]
對於原函數,咱們找一個二次函數來擬合它
\[ \begin{aligned} \int_a^bf(x)dx &\approx\int_a^bAx^2+Bx+C\\ &=\frac{A}{3}(b^3-a^3)+\frac{B}{2}(b^2-a^2)+C(a-b)\\ &=\frac{(b-a)}{6}(2A(b^2+ab+a^2)+3B(b+a)+6C)\\ &=\frac{(b-a)}{6}(2Ab^2+2Aab+2Aa^2+3Bb+3Ba+6C)\\ &=\frac{(b-a)}{6}(Aa^2+Ba+C+Ab^2+Bb+C+4A(\frac{a+b}{2})^2+4B(\frac{a+b}{2})+4C)\\ &=\frac{(b-a)}{6}(f(a)+f(b)+4f(\frac{a+b}{2}))\\ \end{aligned} \]
52.歐拉公式\[V-E+F=2\]
\(V:vertex\)頂點
\(E:edge\)邊
\(F:flat\)面
對全部維度的全部多邊形都成立
53.圓的反演
反演中心爲\(O\),常數爲\(k\),若通過\(O\)的直線通過\(P,P'\),且\(OP\times OP'=k\),則稱\(P,P'\)關於\(O\)互爲反演,其中\(O\)爲反演中心,\(k\)爲反演冪
以及一些性質(這裏\(O\)指反演中心)
1.一根過\(O\)的直線的反形是自己
2.一根不過\(O\)的直線的反形是一個過\(O\)的圓
3.一個過\(O\)的圓的反形是一根不過\(O\)的直線
4.一個不過\(O\)的圓的反形是一個和該圓關於\(O\)位似的圓
5.反演不改變相切關係
能夠大概這麼解釋:兩個不一樣顏色的三角形類似,易證直線\(CD\)關於\(E\)的反演是一個圓
關於\(4\)大概是長這個樣子
54.無向圖三元環計數
咱們把每一條邊重定向,設它鏈接的兩個點的度數分別爲\(deg_u\)和\(deg_v\),那麼把這條邊定爲從度數大的連向度數小的,若是度數相同按標號大小。這樣顯然能夠建出一個有向無環圖
因此怎麼找環呢
咱們枚舉點\(u\),並枚舉它的全部出邊,把出邊指向的點\(v\)標記上\(u\)。而後再枚舉一邊出邊,並對每一個\(v\)也枚舉出邊,若是\(v\)的出邊指向的點\(w\)上的標記是\(u\)那麼說明找到了一個三元環
顯然,每一個三元環都會被統計剛好一次
接下來的問題是複雜度,咱們要證實它的上界是\(O(m\sqrt{m})\)
1.\(\forall v,out_v\leq \sqrt{m}\),每一次枚舉\(v\)的出邊的複雜度不會超過\(O(\sqrt{m})\),因此這一部分複雜度不會超過\(O(m\sqrt{m})\)
2.\(\forall v,out_v\geq \sqrt{m}\),由於在這種狀況下必有\(deg_u\geq deg_v\),因此全部這樣的\(u\)不會超過\(O(\sqrt{m})\)個,每個\(out_v\)的貢獻最可能是\(\sqrt{m}out_v\),因爲\(\sum out_v=O(m)\),因此這一部分的複雜度也不會超過\(O(m\sqrt{m})\)
55.這是一個能夠\(O(n)\)求出\(n\)個數逆元的方案
先把全部的數作一個前綴積,記爲\(s_i\)
而後咱們用快速冪求出\(s_n\)的逆元,記爲\(sv_n\)
由於\(sv_n\)是\(a_1\)到\(a_n\)的逆元,咱們把它乘上\(a_n\),就獲得了\(sv_{n-1}\)
同理可得\(sv_{1,...,n-2}\)
那麼\(a_i\)的逆元就能夠用\(sv_i\times s_{i-1}\)來表示了
順便還有\(O(s)\)預處理,\(O(1)\)求快速冪的辦法(\(s=\sqrt{P}\))(給定\(x\)的狀況下)
預處理出\(x^0,x^1,...,x^s\),以及\(x^0,x^s,x^{2s},...\),而後就能夠\(O(1)\)詢問了
55.環的染色方案數
咱們如今要對一個環進行染色,要求兩兩顏色不一樣,設點的個數爲\(n\),顏色個數爲\(c\),求方案數
設\(f_i\)表示\(i\)個點的染色方案數。咱們能夠欽定一個開頭,設爲\(1\),並順時針一次記爲\(2,3,...,n\)
若是\(1\)號點和\(n-1\)號點顏色不一樣,那麼方案數爲\(f_{n-1},\)\(n\)號點能夠選的方案數就是\((c-2)\)
若是\(1\)號點和\(n-1\)號點顏色相同,那麼方案數爲\(f_{n-2}\),即等價於\(n-2\)個點的環再插一個進去,此時\(n\)號點的顏色方案數爲\(c-1\)
因此咱們能夠求得遞推公式
\[f_n=(c-2)f_{n-1}+(c-1)f_{n-2}\]
初值爲\(f_0=1,f_1=c\)
根據數列的特徵方程(由於我數學課老師講這個的時候我快睡着了因此我也不是很清楚因此具體百度),咱們能夠求得\(f_n\)的通項公式爲
\[f_n=(c-1)^n+(-1)^n(c-1)\]
順帶一提,若是須要若是強制環的兩個端點相同的話,方案顯然就是\(f_{n-1}\)
56.\(O(n^2)\)多項式\(Ln\)和多項式\(Exp\)
其實這裏是能夠\(O(n\log n)\)搞的然而代碼實在太長而,且這裏數據範圍夠小因此咱們能夠\(O(n^2)\)作,若是您耐心夠好並且對本身的多項式碼力有自信徹底能夠跳過這一節
通過\(shadowice\)巨巨一個下午的調教我終於會了
對於多項式\(Ln\),咱們須要暴力的就是它求逆的過程,即咱們須要暴力計算一個形如
\[F(x)={P(x)\over Q(x)}\]
的柿子
根據\(Ln\)的使用條件,得有\([x^0]Q(x)=1\)
咱們令\(T(x)=Q(x)-1\),則\(Q(x)=T(x)+1\),即
\[F(x)={P(x)\over T(x)+1}\]
\[F(x)(T(x)+1)=P(x)\]
\[F(x)=P(x)-F(x)T(x)\]
由於有\([x^0]T(x)=0\),因此咱們就能夠直接暴力卷積把\(F(x)\)給一項一項卷出來了,卷完以後積分一下就能夠求出\(Ln\)了
而後是多項式\(Exp\),即要求
\[F(z)=e^{G(z)}\]
\[F'(z)=G'(z)F(z)\]
沒了
多項式\(Ln\)
int main(){ // freopen("testdata.in","r",stdin); n=read(); fp(i,0,n-1)A[i]=read(); --A[0]; inv[0]=inv[1]=1;fp(i,2,n)inv[i]=mul(P-P/i,inv[P%i]); fp(i,0,n-1){ B[i]=0; fp(j,0,i)B[i]=add(B[i],mul(A[i-j],B[j])); B[i]=dec(mul(A[i+1],i+1),B[i]); } fd(i,n-1,1)B[i]=mul(B[i-1],inv[i]);B[0]=0; fp(i,0,n-1)print(B[i]); return Ot(),0; }
多項式\(Exp\)
int main(){ // freopen("testdata.in","r",stdin); n=read(); fp(i,0,n-1)A[i]=read(); fp(i,1,n-1)A[i-1]=mul(A[i],i);A[n-1]=0; inv[0]=inv[1]=1;fp(i,2,n)inv[i]=mul(P-P/i,inv[P%i]); B[0]=1; fp(i,0,n-1){ res=0; fp(j,0,i)res=add(res,mul(A[i-j],B[j])); B[i+1]=mul(res,inv[i+1]); } fp(i,0,n-1)print(B[i]); return Ot(),0; }
57.對於線性規劃
\[Ax+By+C<0\]
不論\(A,B,C\)符號如何,這個線性規劃對應的半平面永遠是\((-B,A)\)(也就是說設這個向量爲\(x\),\(Ax+By+C=0\)上任意一點爲\(p\),那麼\(p,p+x\)這兩個點肯定的直線的左邊就是對應的半平面)
58.對\(1+p+p^2+...+p^{k-1}\)求和,能夠直接用等比數列求和公式代入計算\({1-p^k\over1-p}\),複雜度\(O(\log P)\)(求逆元)
或者把長爲\(k\)的數列拆成\(\log k\)段計算,複雜度\(O(\log k)\)
int calc(R int x,R int y){ R int res=1,d=1; for(--y;y;y>>=1,d=add(mul(d,x),d),x=mul(x,x))(y&1)?res=add(mul(res,x),d):0; return res; }
59.計算幾何中的平面圖轉對偶圖->這裏
60.混合積
對於三個三維向量\(a,b,c\),定義它們的混合積爲\((a\times b)\cdot c\),其中$\times \(表示叉乘,\)\cdot\(表示點乘,記爲\)[a b c]$
關於它的幾何意義的話……圖片來自網絡
其中\(Prj_{a\times b}c\)表明的是\(c\)這個向量在\(a\times b\)這個向量上的投影
那麼顯然咱們最後獲得的是以這三個向量爲三條臨邊的一個六面體的體積
61.四面體體積
假設四面體的四個頂點分別爲\(A,B,C,D\),並設三個向量\(a=B-A,b=C-A,c=D-A\),那麼這個正四面體的體積就是\({1\over 6}[a\ b\ c]\)
這個應該比較顯然吧……看上面那幅圖,四面體的體積是以\(ab\)這個平行四邊形爲底,\(c\)爲頂點的棱錐的一半,而棱錐的體積是棱柱的\({1\over 3}\),因此四面體體積就是六面體的\({1\over 6}\)了
62.凸多面體的重心
咱們先來考慮一下凸多邊形的重心好了……
對於三角形,它的重心就是它全部座標的平均值
那麼對於凸多邊形,咱們把它三角剖分了,記第\(i\)塊的重心爲\(a_i\),面積爲\(m_i\),那麼凸多邊形的重心就是
\[{\sum_{i=1}^na_i\times m_i\over \sum_{i=1}^nm_i}\]
那麼凸多面體也差很少了,咱們把它給四面體剖分了,而後也差很少按上面的算就行了
關於四面體剖分,具體的說咱們在多面體中隨便選一個點,比方說是\(p_1\),而後把每個面給三角剖分,那麼三角形就和選定的點構成了一個四面體。設\(v_i\)表示第\(i\)個四面體的體積,\(a_i\)表示重心,則最終多面體的重心爲
\[{\sum_{i=1}^na_i\times v_i\over \sum_{i=1}^nv_i}\]
62.二面角
這玩意兒班裏數學課正在上然而我正在停課
簡單來講就是兩個平面的夾角
咱們假設如今有\(a,b,c\)三個向量,要求\(ab\)這個平面和\(ac\)這個平面的二面角
那麼求出\(ab\)和\(ac\)的法向量(法向量能夠直接用叉積算),兩個法向量之間的夾角就是二面角了,法向量之間的夾角直接用點積除以長度計算
能夠畫個圖來理解。咱們俯視的話,即要求二面角\(\angle 1\),那麼顯然兩個法向量的夾角\(\angle 2=\angle 1\)
63.設直線\(y=kx+b\),點\((x,y)\),則點到直線的距離爲
\[{|kx-y+b|\over \sqrt{k^2+1}}\]
64.求到\(n\)個點的距離的平方和最小的直線->這裏
求到\(n\)條直線距離的平方和最小的點->這裏
65.曼哈頓距離和切比雪夫距離
對於兩個點\((x_i,y_i)\)和\(x_j,y_j\),咱們定義它們之間的曼哈頓距離爲
\[|x_i-x_j|+|y_i-y_j|\]
定義它們的切比雪夫距離爲
\[\max(|x_i-x_j|,|y_i-y_j|)\]
有以下轉換:
將原座標爲\((x,y)\)的點轉化爲\((x+y,x-y)\)以後,原座標系中的曼哈頓距離等於新座標系中的切比雪夫距離
將原座標爲\((x,y)\)的點轉化爲\(({x+y\over 2},{x-y\over 2})\)以後,原座標系中的切比雪夫距離等於新座標系中的曼哈頓距離
這裏只證後一個,由於前一個就是它反過來
證實:
首先咱們有一個結論
\[\max\left({|a+b|,|a-b|}\right)=|a|+|b|\]
分類討論就能證實了
那麼兩個點重構以後的座標爲\(({x_i+y_i\over 2},{x_i-y_i\over 2}),({x_j+y_j\over 2},{x_j-y_j\over 2})\),設爲\((x_i',y_i'),(x_j',y_j')\),那麼如今它們之間的距離爲
\[ \begin{aligned} Ans &=\max(|x_i-x_j|,|y_i-y_j|)\\ &=\max(|(x_i'+y_i')-(x_j'+y_j')|,|(x_i'-y_i')-(x_j'-y_j')|)\\ &=\max(|(x_i'-x_j')+(y_i'-y_j')|,|(x_i'-x_j')-(y_i'-y_j')|)\\ &=|x_i'-x_j'|+|y_i'-y_j'| \end{aligned} \]
沒了
66.笛卡爾定理
咱們定義一個圓的曲率爲\(k=\pm {1\over r}\),其中\(r\)是圓的半徑
若在平面上有兩兩相切,且六個切點互不相同的四個圓,設其曲率分別爲\(k1,k2,k3,k4\)(若該圓和其它全部圓都外切,則其曲率取正,不然曲率取負),則有
\[(k1+k2+k3+k4)^2=2(k1^2+k2^2+k3^2+k4^2)\]
相似的,如果空間中有兩兩相切且切點互不相同的五個球體,則有
\[(k1+k2+k3+k4+k5)^2=3(k1^2+k2^2+k3^2+k4^2+k5^2)\]
67.巴什博奕
\(Nim\)遊戲的改版,咱們如今每次最多隻能取走\(k\)個石子,那麼\(SG\)函數很容易寫出來
\[SG(x)=mex_{i=1}^{\min(x,k)}SG(x-i)\]
有\(SG(0)=0\),用概括法易知\(SG(x)=x\bmod (k+1)\)
68.階梯博弈
有\(n\)級臺階,從\(0\)級開始數到\(n\)級。每級上都有必定的石子。每次能夠把一個階梯的石子往下移,\(0\)級階梯的不能移,不能操做者輸。
這裏有一個結論,咱們只須要考慮全部奇數層,該遊戲就等價於\(Nim\)遊戲
爲啥嘞?
首先偶數層是不會有任何影響的,由於若是你移動偶數層若干個石子到奇數層,那麼對手必定能夠經過移動把你移的石子移到下一個偶數層,至關於這些石子仍然在偶數層。若是移動奇數層的石子,咱們就默認它消失了
69.設\(i\)和\(j\)在\([1,n]\)上隨機取值的離散型隨機變量,則\(\max(i,j)\)的指望是\(O({2\over 3}n)\),\(|i-j|\)的指望是\(O({1\over 3}n)\)
關於前面那個,咱們枚舉最大值,而後計算有多少對的最大值爲它
\[ \begin{aligned} E(\max(i,j)) &={1\over n^2}\sum_{k=1}^nk\times (2k-1)\\ &={1\over n^2}\left(2\sum_{k=1}^nk^2-\sum_{k=1}^nk\right)\\ &={1\over n^2}\left({2n(n+1)(2n+1)\over 6}-{3n(n+1)\over 6}\right)\\ &={1\over n^2}\left({4n^3+3n^2-n\over 6}\right)\\ &=O({2\over 3}n)\\ \end{aligned} \]
關於後面這個,記\(s(i)=\sum\limits_{k=1}^ik\),咱們枚舉第一個位置選在哪兒
\[ \begin{aligned} E(|i-j|) &={1\over n^2}\left(\sum_{k=1}^ns(k-1)+s(n-k)\right)\\ &={1\over n^2}\left(2\sum_{k=1}^{n-1}s(k)\right)\\ &={1\over n^2}\left(\sum_{k=1}^{n-1}k(k-1)\right)\\ &={1\over n^2}\left(\sum_{k=1}^{n-1}k^2-k\right)\\ \end{aligned} \]
具體不算下去了(我也算不動……),看一下前面那個大概能夠猜出它是\(O({1\over 3}n)\)了
70.平面上隨機\(n\)個點,凸包上的指望點數是\(O(n^{1\over 3})\)(聽說這好像已是個結論了?)
71.在\([0,1]\)上插入\(n-1\)個點使其分紅\(n\)條線段,最短線段的長度指望是\({1\over n^2}\)
72.暴力多項式取模
咱們要計算\(A(x)\bmod{B(x)}\),首先有\(B(x)\equiv 0\pmod{B(x)}\),那麼設\(B\)的最高次項次數爲\(m\),就有\(x^m\equiv -{1\over b_m}\sum_{i=0}^{m-1}b_ix^i\pmod{B(x)}\),把\(A(x)\)中全部次數大於\(m\)的項都這樣暴力分解就好了
poly Mod(poly A,poly B){ int n=A.size(),m=B.size(); fd(i,n-1,m-1)if(A[i]){ int t=mul(P-A[i],ksm(B[m-1],P-2)); fp(j,0,m-1)A[i-j]=(A[i-j]+1ll*t*B[m-1-j])%P; } while(!A.empty()&&!A.back())A.pop_back(); return A; }