一些抄來的冷知識...

1.

點分治 向下遞歸的時候兩種寫法(是否判斷當前子節點爲上層點分樹中的父節點)都不會鍋html

2.

枚舉子集方法有三,暴力不說,高維前綴和網上挺多,至於另外一種玄學算法總感受很像 FWT :ios

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];
}

3.

判斷數列 \(\{a_n\}\) 中的每一個數乘上一個非負係數後是否能夠構成 T 時,咱們能夠把這些數中最小的 x 拿出來,讓剩下的數和 T 知足: \(sum = T (mod x)\) ,也就是模 x 下同餘,而後點 \(u\) 向模 x 意義下的 \(u+c_i\) 連一條邊,長度爲減去的 x 個數,而後跑最短路,康康最短距離乘上 x 是否小於等於 \(\lfloor T / x\rfloor\) 就行了git

4.

若三點在某一條通過原點的直線上的投影中心對稱,設三點座標分別爲 \((xa,ya),(xb,yb),(xc,yc)\),則 \((ya+yc-2 * yb,-xa-xc+2 * xb)\) 爲該直線上一點,其中 B 點的投影爲對稱中心算法

5.

對於一棵樹每次標記一條路徑,路徑上點對可相互到達,求屢次標記後可相互到達的點對數,能夠轉化爲 dfs 序,而後樹剖完了線段樹上掃描線二維數點求, ZJOI 考過,然而卡常(並且我這隻菜雞也沒想出來)函數

6.

O(1) 求 1~n 的異或和:spa

inline int calc(R int n){int t=n&3;return t&1?(t/2^1):(t/2^n);}

7.

O(1) GCD:code

zzq 大佬的 blog 裏面有寫,我還搬下來作過板子...htm

某些 數據下會比帶 log 的算法高到不知道哪裏去,然鵝隨機狀況嘛...咳咳,我只能說,人家 O(1) 是要預處理的...blog

8.

O(1) 前綴 k 次和:遞歸

相似這麼個式子: \(\sum_{i=0}^n i^k\) (雖然說左邊界是 0 是 1 沒什麼關係,畢竟 k 也不會等於 0 )

對於 k=1 : 原式= \((n+1)n\over 2\)

對於01314413 k=2 : 原式= \(n(n+1)(2n+1)\over 6\) 或者 \(n(n+{1\over 2})(n+1)\over 3\) 也挺好記的

對於 k=3 : 原式= \((n+1)^2n^2\over 4\) ,其實就是 k=1 的狀況平方了一下...

還有不少能夠 O(1) 計算的東西,具體能夠看這裏

9.

對於集合 S 全部子集的異或和取值中,每種取值出現次數相等,即 S 的任意子集獲得的異或和值爲 x 的機率是相等的 ( x 爲 S 全部子集異或和取值) 證實

10.

對於一棵 n 節點的帶編號樹,它的生成樹數量爲 \(n^{n-2}\) 個(可用 Prufer 序列證實)

11.

斐波那契數列\(f(n)=(1,1,2...)\)的前綴和數列\(S(n)\)知足:

\[S(n)=f(n+2)-1\]

概括法證實:

當 n=1 時,原式成立

假設 \(S(n-1)=f(n+1)-1\) 成立,那麼有:
\[S(n)=S(n-1)+f(n)=f(n+1)+f(n)-1=f(n+2)-1\]

證畢

12.

在模 p ( p 爲質數)意義下,有:

\[\prod_{i=1}^{p} (x+i)= x(x^{p-1}-1)(mod~ p)\]

證實? 不會,背結論吧... (貌似要用惟一分解整環什麼的,反正我不會...)

emmm...話說蒟蒻我好像想到了一個另類解法的開頭,就是咱們對於左邊的式子展開,而後把除了最高項的每一項都提取出一個 \((p-1)!\) ,而後威爾遜定理搞一搞,發現這玩意兒模 p 意義下就是 p-1 ,(好像並無什麼軟用,由於 p-1 並不等於 0 ),而後做者太懶不打算想,因而就咕掉了...(估計也是證不出來...)
$$$$

不過還有另外一種隨意的解法,就是咱們發現左邊的式子必然是等於 0 的,而後右邊的式子也等於 0 ...

(就是說左邊的 x 加上 1~p-1 的全部數,總有一個是等於 0 的,然後面式子有 \(x^{p-1}-1\) ,當 x=1~p-1 時費馬小定理可得原式等於 0 ,當 x=0 時前面又有個 x ...),因而等式兩邊恆等於 0 ? 總之記住這個詭異的性質...

13.

恆等式:

\[Ln(1-x^i) =-\sum_{j=1}^\infty {x^{ij}\over j}\]

proof:

\[\begin{aligned}G(x)=&Ln(1-x^i) \\G'(x)=& {-i·x^{i-1}\over 1-x^i} \\ G'(x)=&-\sum_{j=0}^\infty i·x^{i-1+ij} \\G(x)=& -\sum_{j=0}^\infty {i·x^{i+ij}\over i+ij} \\ G(x)=&-\sum_{j=0}^\infty {x^{i(j+1)}\over j+1} \\G(x)=&- \sum_{j=1}^{\infty} {x^{ij}\over j} \end{aligned} \]

14.

一些數論變化:

(1)

\[ \sum_{i=1}^n i[gcd(i,n)=1]= {\varphi (n)n +[n==1] \over 2} \]

proof:

n=1:

原式成立

n>1:

\[\begin{aligned}2\sum_{i=1}^n i[gcd(i,n)=1]=& \sum_{i=1}^{n} i[gcd(i,n)=1]+\sum_{i=1}^n n-i[gcd(i,n)=1] \\=&\sum_{i=1}^n n[gcd(i,n)=1] \\=& n\sum_{i=1}^n gcd(i,n) \\=& n \varphi(n) \end{aligned}\]

(2)

\[\sigma_1(ij)=\sum_{p|i} \sum_{q|j} [gcd(p,q)=1] {pj\over q}\]

proof:

太迷了不會...

假設 ij 有質因子 d , d在 i 中出現 a 次, j 中出現 b 次

考慮 gcd(i,j)=1 ,那麼同一個 d 不可能被 p 和 q 同時整除,因而咱們分三類狀況討論取值範圍:

\(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-1}\) 的倍數

\(d\nmid p , d\nmid q\) : 這樣咱們發現 \({pj\over q}\)\(d^{b}\) 的倍數

(3)

\[\sum_{i=1}^n\sigma_1(i)=\sum_{i=1}^{n} i\lfloor {n\over i} \rfloor\]

proof:

其實就至關於求 1~n 每一個數的因子和,變成了求每一個數乘上它在 1~n 中被整除的次數

15.

無向連通圖計數:

考慮令 f(n) 爲 n 節點無向圖個數, g(n) 爲 n 節點無向連通圖個數,則有:

\[f(n)=2^{n(n-1)\over 2}\]

\[\begin{aligned}f(n)=&\sum_{i=1}^n g(i) f(n-i) \\ g(n)=& f(n)-\sum_{i=1}^{n-1}g(i)f(n-i) \end{aligned}\]

而後...能夠考慮 \(n^2\) 遞推,也能夠分治 FFT ,甚至還能夠考慮更加高級的作法...貌似說還能夠對 f 函數取個 ln 就好了?雖然說驗證了一下好像鍋了

16.

一個 k 棵樹的森林,邊集爲 T , 每棵樹點數爲 \(a_i\) ,那麼包含邊集 T 的生成樹數量爲:

\[num(T)=n^{k-2}\prod_{i=1}^k a_i\]

proof:

Prufer 序列感性理解一下?首先每一個葉子聯通塊連向另外一個聯通塊,咱們把連向的聯通塊中節點編號記錄下來,那就是總共搞 k-2 次 , 而且咱們每次葉子聯通塊連出去的節點編號並不肯定,這樣的 k-2 個葉子節點相乘,在枚舉最後兩個節點相連的那兩個編號,正好是每一個聯通塊內的節點數都乘了起來

17.

恆等式:
\[x^n-y^n=(x-y)(x^{n-1}+x^{n-2}y+x^{n-3}y^2+...+y^{n-1})\]

Proof:

正難則反,咱們把後面的式子合起來:

\[\begin{aligned} &(x-y)(x^{n-1}+x^{n-2}y+x^{n-3}y^2+...+y^{n-1}) \\ =& x^n+\sum_{i=1}^{n-1} x^{n-i}y^i - y^n -\sum_{i=1}^{n-1} y^{n-i}x^i \\=& x^n-y^n \end{aligned}\]

很是暴力...

18.

恆等式,法法塔(FFT)相關:

\(\omega\) 表示單位根, \(\omega_k\) 表示 k 次單位根,則:

\[{1\over k} \sum_{i=0}^{k-1} \omega_{k}^{in}=[k|n]\]

Proof:

分類討論:

  1. \(k\nmid n\)

\[\begin{aligned} &{1\over k} \sum_{i=0}^{k-1} \omega_{k}^{in} \\ =&{1\over k} {1-\omega_{k}^{nk} \over 1-\omega_k^n} \\=& {1-1\over k(1-w_k^n)} \\=&0 \end{aligned}\]

  1. \(k\mid n\)

\[\begin{aligned} &{1\over k} \sum_{i=0}^{k-1} \omega_k^{in} \\ =& {1\over k}\sum_{i=0}^{k-1} 1 \\=& {k\over k} =1 \end{aligned} \]

合併一下就是原來的恆等式了

19.

自適應辛普森瞭解一下

20.

歐拉公式:對於一個任意維度的多面體,存在一下關係

\[V-E+F=2\]

V 表示多面體點數(Vertex)

E 表示多面體邊數(Edge)

F 表示多面體面數(Flat)

proof:

從四面體開始, \(V=4,E=6,F=4\) ,結論成立

而後假設 n 面體知足公式,那麼有:

\[\begin{cases}V_n-E_n+F_n=2 &&...1 \\V_{n+1}-V_n+1=E_{n+1}-E_n &&...2\\F_{n+1}=F_n+1 &&...3 \end{cases}\]

而後咱們發現由三個式子能夠合併獲得:

\[V_{n+1}-E_{n+1}+F_{n+1}=2\]

21.

三元環計數:

對於一個無向圖,咱們能夠對它的邊重定向,而後三元環計數

具體方法以下:

  1. 對於全部的邊,強制度數大的點指向度數小的,度數相等則編號大指向編號小
  1. O n 處理全部的點,對於點 u ,讓其向連出去的點 v 打上 'u' 的標記
  1. 對於點 u ,再次掃一遍連出去的點 v ,而後 v 去掃描連出去的點,每次碰到打過 'u' 標記的點就讓 ans++
  1. 這樣獲得的 ans 就是不算重的原圖三元環個數

複雜度的話是 \(O(m\sqrt m)\) , m 爲邊數 , n 爲點數且 n、 m 同階,下面證實統一用 m

proof:

對於每一個點 v 咱們分兩種狀況:

\(deg_v<\sqrt m\) : 這樣的點最大掃描次數 O(m) ,乘上出度,複雜度 \(O(m\sqrt m)\)

\(deg_u>\sqrt m\) : 這樣的點最多 $\sqrt m $ 個,因此連進來的點也最多根號個,三個根號乘起來,複雜度 \(O(m\sqrt m)\)

綜上,這個算法總複雜度爲 \(O(m\sqrt m)\)

22.

環的染色方案數:

咱們如今要對一個環進行染色,要求相鄰的點顏色不一樣,設點的個數爲 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\)

根據數列的特徵方程(明天要去問數學老師了,問董了的話就 update 上來),咱們能夠求得 \(f_n\) 的通項公式爲
\[f_n=(c-1)^n+(-1)^n(c-1)\]

順帶一提,若是須要若是強制環的兩個端點相同的話,方案顯然就是 \(f_{n-1}\)

update:

上面講了特徵方程,這玩意兒數學老師說原理比較玄學(雖然說看了看推導不是很複雜...),而後叫我本身找資料去

不過仍是學到了特徵方程的構造方法(不過要線性齊次遞推就是了):

首先根據遞推式列方程,用遞推式裏面每一項和最低項的位數差當作該項的次數,舉個例子,若是某個數列的遞推式是這樣的:

\[f_n=a·f_{n-1} + b·f_{n-2}+c·f_{n-3}\]

那麼這個數列的特徵方程就是:

\[x^3=a·x^2+b·x+c\]

而後咱們要作的就是解出這個方程的根(\(x_1,x_2,x_3\)),而後獲得這麼個通項公式:

\[f_n=A·(x_1)^n+B·(x_2)^n+C·(x_3)^n\]

至於這裏的 A, B, C 具體值是多少就要帶入數列的前 3 項解多元一次方程了...

(看您這麼聰明舉了這麼個例子應該能搞懂了吧?)

具體特徵方程是怎麼來的和等比數列的轉換有關,具體能夠康這裏

不過知乎上也有線性代數的說法(可能這個就是本質了?),給個連接就逃...(第二個答案)

23.

\(n^2\) 的 Ln 和 Exp (十分好寫...)

推導以下:

Ln

\(F(x)=Ln(A(x))\) ,就是對於 A 求個導數求個逆而後相乘,本質就是:

\[\begin{aligned}F(x)=& {A'(x)\over A(x)} \end{aligned}\]

咱們讓 \(T(x)=A(x)-1\) , 也就是丟了個常數項,那麼 \(A(x)=T(x)+1\) ,且 T(x) 常數項爲 0

\[\begin{aligned} F(x)=&{A'(x)\over A(x)} \\F(x)=& {A'(x)\over T(x)+1} \\ F(x)(T&(x)+1)=A'(x) \\F(x)=& A'(x)-F(x)T(x) \end{aligned}\]

式子中部極其...emmm,總之別看上面的式子是左右都有 F(x) ,咱們能夠卷積的嘛,計算某一項係數的時候只須要 O(n) 卷個 \(F(x)T(x)\) ,卷 \(0\)~\(n-1\) 就 好了,由於 T(x) 的 0 次項是 0 啊...

Exp

而後就是 Exp 了,推導很簡單,求個導...

\[\begin{aligned} F(x)=&e^{A(x)} \\ F'(x)=& A'(x)e^{A(x)} \\ F'(x)=& A'(x)F(x) \end{aligned}\]

完了咱繼續 O(n) 卷,這回咱們就是直接對左邊算 n-1 次項了,因此右邊 F(x) 也捲到 n-1 次就行了,而後咱們拿左邊算出的 n-1 項當 F(x) 的第 n 項,至於最低位(常數項)就是 1 了...

代碼僅供參考...

//by Judge
#include<cstdio>
#include<cstring>
#include<iostream>
#define Rg register
#define fp(i,a,b) for(Rg int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(Rg int i=(a),I=(b)-1;i>I;--i)
using namespace std;
const int mod=998244353;
const int M=1e5+3;
typedef int arr[M];
#ifndef Judge
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
#endif
char buf[1<<21],*p1=buf,*p2=buf;
inline int mul(int x,int y){return 1ll*x*y%mod;}
inline int dec(int x,int y){return (x-=y)<0?x+mod:x;}
inline int inc(int x,int y){return (x+=y)>=mod?x-mod:x;}
inline int read(){ int x=0,f=1; char c=getchar();
    for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
    for(;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f;
} char sr[1<<21],z[20];int CCF=-1,Z;
inline void Ot(){fwrite(sr,1,CCF+1,stdout),CCF=-1;}
inline void print(int x,char chr=' '){
    if(CCF>1<<20)Ot();if(x<0)sr[++CCF]=45,x=-x;
    while(z[++Z]=x%10+48,x/=10);
    while(sr[++CCF]=z[Z],--Z);sr[++CCF]=chr;
} int n; arr A,B,inv;
inline void poly_Ln(int* A,int* B,int n){
    --A[0];
    fp(i,0,n-1){ B[i]=0;
        fp(j,0,i) B[i]=inc(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;
}
inline void poly_Exp(int* A,int* B,int n){
    fp(i,1,n-1) A[i-1]=mul(A[i],i);
    A[n-1]=0,B[0]=1;
    fp(i,0,n-1){ B[i+1]=0;
        fp(j,0,i) B[i+1]=inc(B[i+1],mul(A[i-j],B[j]));
        B[i+1]=mul(B[i+1],inv[i+1]);
    }
}
int main(){ n=read(),inv[0]=inv[1]=1;
    fp(i,2,n) inv[i]=mul(mod-mod/i,inv[mod%i]);
    fp(i,0,n-1) A[i]=read();
    poly_Ln(A,B,n);
    fp(i,0,n-1) print(B[i]); sr[CCF]='\n';
    poly_Exp(A,B,n);
    fp(i,0,n-1) print(B[i]); sr[CCF]='\n';
    return Ot(),0;
}

24.

凸多邊形、凸多面體的重心計算:

多邊形

對於三角形的重心計算,只須要對於三角形三個頂點 \((x_1,y_1),(x_2,y_2),(x_3,y_3)\) 進行累加除三就行了,即重心 \(G({x_1+x_2+x_3 \over 3} ,{y_1+y_2+y_3\over 3})\)

先對原圖形三角剖分,而後求出每一個三角形對應的重心(就用上面的三角形重心計算公式)

而後對於全部的三角形,咱們對於橫座標和縱座標分別處理,即總重心橫座標爲:\(\sum_i x_i · m_i\over \sum_i m_i\) ,這裏的 \(m_i\) 表示質量,學太高中物理老師可能講過,可是在這裏就表明面積了,至於總重心的縱座標也能夠用相似的方法求出,那麼用 \(a_i\) 表示第 i 個三角形的座標,總重心座標便是:

\[\sum_i a_i·m_i \over \sum_i m_i\]

簡單的說,這裏的 質量 \(m_i\) 就是面積 \(s_i\)

\[\sum_i a_i·s_i \over \sum_i s_i\]

多面體

類比一下,凸多面體的重心求解大概就是:

對於四面體的重心計算,咱們只須要把四個頂點的橫縱座標分別加起來除去四就一一對應了重心的橫座標和縱座標,即:\(x_G={x_1+x_2+x_3+x_4\over 4},y_G={y_1+y_2+y_3+y_4\over 4}\),四面體質量(這裏即體積)的計算就各憑本事

先對於多面體四面體剖分,而後求出每一個四面體的重心

接着進行相似凸多邊形的處理,把全部的座標乘上質量,相加除去總質量便可,公式以下(和上面那個差不了多少):

\[\sum_i a_i·v_i \over \sum_i v_i\]

其中 \(v_i\) 表示體積

PS:多嘴一句,這裏的座標其實看作多維向量就行了(學過線代的大佬們表示秒出...)

25:

求解二面角:

其實(搞信息的)並不怎麼用?

要求給出兩個平面求出兩個平面之間的夾角(固然,兩個平面相交...)

作法就是先建個系(通常來說題目裏面要給出平面的話其實就是給出了三維座標系),而後咱們要求出兩個平面分別的法向量(這裏的法向量也就是跟原平面垂直的一個三維向量),法向量求法以下:

設座標\((x_0,y_0,z_0)\),而後在平面上隨便找兩條不相交的向量,而後兩個向量叉乘就能夠獲得一個該平面的法向量(求法參照線性代數

而後咱們對於兩個平面的法向量求個三角函數值,再反三角函數轉回來就行了:

\[cos \theta = {n·m\over |n| |m|}\]

(下面那倆玩意兒就是數值相乘)

而後反三角函數直接上?

26.

點到直線距離:

\[\begin{aligned} & \begin{cases} l: Ax+By+C=0 \\ a=(x_0,y_0) \end{cases} \\ \Rightarrow & ~~ dis_{a,l} ={|A·x_0+B·y_0+C|\over \sqrt{A^2+B^2}} \end{aligned}\]

兩平行直線距離:

\[\begin{aligned} & \begin{cases} l_1: y=kx+b_1 \\ l_2:y=kx+b_2 \end{cases} \\ \Rightarrow & ~~ dis_{1,2} = {|b_2-b_1|\over \sqrt{k^2+1}} \end{aligned}\]

27.

曼哈頓距離 和 切比雪夫距離 的定義及相互轉換:

定義

對於兩個點 \((x_i,y_i),(x_j,y_j)\) ,他們的

曼哈頓距離的定義:

\[dis_{h(i,j)}=|x_i-x_j|+|y_i-y_j|\]

切比雪夫距離的定義:

\[dis_{q(i,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})\) ,那麼本來座標系中的切比雪夫距離就是轉化後的座標系中的曼哈頓距離

咱們能夠發現這兩個轉化是互逆(等價)的,也就是說證實其中一個成立,則另外一個命題也成立,那麼咱們不妨就證實第一個轉化的正確性好了:

咱們把設 原座標爲 \((x,y)\) ,新座標爲 \((x',y')=(x+y,x-y)\) ,那麼有:

爲了式子更加簡潔,咱們令 \(X=x_i-x_j,Y=y_i-y_j\)

\[\begin{aligned}dis_{h(i,j)}=&|x_i-x_j| + |y_i-y_j| \\=& |X|+|Y| \\ =&max(X,-X)+max(Y,-Y) \\ =& max(max(X+Y,-X-Y),max(X-Y,-X+Y)) \\=&max(|X+Y|,|X-Y|) \\ =&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'|) \\=& dis_{q(i',j')} \end{aligned}\]

證畢...

28.

笛卡爾定理

設四個圓的半徑爲: \(r_1,r_2,r_3,r_4\)

一、若四個圓兩兩外切,則有:

\[\Big({1\over r_1}+{1\over r_2}+{1\over r_3}+{1\over r_4}\Big)^2=2\Big({1\over r_1^2}+{1\over r_2^2}+{1\over r_3^2}+{1\over r_4^2}\Big)\]

二、若前三個圓兩兩外切,且都內切於第四個圓,則有:

\[\Big({1\over r_1}+{1\over r_2}+{1\over r_3}-{1\over r_4}\Big)^2=2\Big({1\over r_1^2}+{1\over r_2^2}+{1\over r_3^2}+{1\over r_4^2}\Big)\]

具體的證實...聽說是用韋達定理?

若是是三維的五個球的話,定理也與上面相似,分爲外切內切兩種狀況

應該還能夠拓展到更高的維度...

29.

階梯博弈:

有 n 級臺階,每級上都有必定的石子。每次能夠把一個階梯的石子往下移,0級階梯的不能移,不能操做者輸。

首先偶數層是不會有任何影響的,由於若是你移動偶數層若干個石子到奇數層,那麼對手必定能夠經過移動把你移的石子移到下一個偶數層,至關於這些石子仍然在偶數層。那麼咱們只需考慮奇數層的石子

因此咱們能夠把原問題變爲取走奇數層的石子,沒法操做者失敗

那麼這就是 Nim 遊戲了

30.

\(i,j \in [1,n]\) 那麼有:

1、$E(max(i,j))=O({2\over3} n) $

2、\(E(|i-j|)=O({1\over 3}n )\)

對於第一個結論,咱們考慮暴力證實

\[\begin{aligned}E(max(i,j))=&{1\over n^2}\sum_{k=1}^n k(2k-1) \\ =& {1\over n^2}\Big( 2\sum_{k=1}^n k^2 -\sum_{k=1}^n k \Big) \\=& {1\over n^2} \Big( {(n+1)n(2n+1)\over 3} - {(n+1)n\over 2} \Big) \\=& {1\over n^2} \Big( { 4n^3+3n^2-n \over 6} \Big) \\=& O({2\over 3}n) \end{aligned} \]

對於第二個結論,咱們一樣考慮暴力證實

\[\begin{aligned}E(|i-j|)=&{1\over n^2}\sum_{k=1}^{n-1} 2k(n-k) \\ =& {1\over n^2}\Big( 2n\sum_{k=1}^{n-1} k -2\sum_{k=1}^{n-1} k^2 \Big) \\=& {1\over n^2} \Big( n^2(n-1) - {n(n+1)(2n+1)\over 3} \Big) \\=& {1\over n^2} \Big( { n^3-6n^2-n \over 3} \Big) \\=& O({1\over 3}n) \end{aligned} \]

其實對於第二個結論,能夠近似看作線段上隨機取兩個點,兩點之間長度的指望值爲線段總長的 \({1\over 3}\),同時這也是珂朵莉樹算法的理論基礎(關鍵數據得是隨機滴...)

31.

一些多項式展開:

\[\begin{aligned}e^x&=\sum_{i=0}^\infty {x^i\over i!} \\e^{-x}&=\sum_{i=0}^\infty (-1)^i {x^i\over i!} \\e^x+e^{-x}&=\sum_{i=0}^\infty {x^{2i}\over (2i)!} \\e^x-e^{-x}&=\sum_{i=0}^\infty {x^{2i+1}\over (2i+1)!} \\e^{nx}&=\sum_{i=0}^\infty n^i{x^i\over i!} \\{1\over 1-x}&=\sum_{i=0}^\infty x^i \\ {1\over 1+x}&=\sum_{i=0}^\infty (-1)^i x^i \\{1\over 1-nx}&=\sum_{i=0}^\infty n^i x^{i} \\{1\over 1-x^n}&=\sum_{i=0}^\infty x^{ni} \\{1\over (1-x)^n}&=\sum_{i=0}^\infty \begin{pmatrix} i\\ n+i-1 \end{pmatrix} x^i \\ Ln(1-x)&= \sum_{i=1}^\infty {x^i\over i} \\ Ln(1+x)&= \sum_{i=1}^\infty (-1)^i{x^i\over i} \end{aligned}\]

$$$$

32.

巴什博奕

這玩意兒挺有趣的...雖然說本身不會證

背景就是有 \(n\) 個石子,每次最多取 \(m\) 個,不能操做(即石子已被取光)者失敗。

結論就是先手不面臨 $n=k(m+1),k\in N^* $ 的狀況就必勝

咱們概括一下證實:

\(n<=m\) 時,先手全取光,就贏了

\(n=m+1\) 時,先手只能取 \([1,m]\) 範圍內的石子個數,剩下的石子數必然在 \([1,m]\) 範圍中,這樣後手就面臨了第一種狀況,必勝

對第二個結論推廣一下,當 $n=k(m+1),k\in N^* $ 時,先手不管怎麼取,剩下的石子數都是: \(k(m+1)+r,k\in N^* , r<m+1\) ,這樣後手只需取走 \(r\) 個石子,狀況就回到了以前的狀況,這樣的狀況持續下去直到 \(k=1\) ,那麼就變成了第二種狀況,後手必勝

那麼對第三個結論換個角度看看,若是說 \(n=k(m+1)+r,k\in N^* , r<m+1\) 的話,先手取走 \(r\) 個石子,回到第三種狀況,先手必勝

總結一下,只要 $n\not=k(m+1),k\in N^* $ ,先手必勝,反以後手必勝

代碼...這不是顯然麼...

相關文章
相關標籤/搜索