一些刷題過程中的結論

2022-07-25 06:39:08 字數 3403 閱讀 5989

**uva 10313 整數i拆分成不超過j個整數的拆分方案數,是和整數i拆成若干個值不超過j的整數的拆分方案數是相同的

原理 ferrers影象 詳:

關於c++引用帶的的不易發現的錯誤。來自於乙個4維dp。uva 10913 例如int&res=dp[i][j][p][q].如果在這個記憶化搜尋子過程中需要更新i,j,p,q;比如在當前遞迴中p++,那麼此時的res是dp[i][j][p-1][q];而不是更新的dp[i][j][p(執行p++之後[q];

double型別,poj出現%lf wa %f ac.為啥就暫且放下,,

矩形主副對角線存在座標和相等,座標差相等的規律。兩點橫縱座標和互為奇偶則兩點不在同一主副對角線上。source:codeforces 264 c

手算開平方:例

26244進行開平方:

1)對26244進行劃分,從最後兩位兩位的向前劃分,結果為2 62 44

2)從最高分段開始計算:只有1 平方小於2,第一次運算的結果為,被除數是2,除數是1,商是1,餘數是1

3)用餘數1和接下來的兩位組成新數162,用公式 商(1*20+x)*x<=162,試探後x = 6,則本次運算的結果是

被除數是162,除數是(1*20+x)=26,商是6,餘數是162 - (20+6)*6 = 6;

4)用餘數6和接下來的兩位組成新書644,用公式(16*20+x)*x<=644,試探得x = 2,則本次運算的結果是

被除數是644,除數是(16*20+x)=322,商是2,餘數是0;

則最後的結果是162;

斐波那契素數:與所有比其小的斐波那契數互質的素數;定理:從第5項開始,某項位斐波那契素數當且僅當他的項數字素數即3,4,5,7.....項位斐波那契素數。黑書221

設字元一空k類,個數分別是n1,n2,n3...nk則這個多重級的全排列個數是(n1+n2+n3....nk)!/n1!*n2!*....*nk!

uvalive 2955 關於梅森素數 

我們把滿足 e = 2 ^ i - 1 的素數e稱作梅森素數。

關於梅森素數,有乙個重要的定理:「乙個數能夠寫成幾個不重複的梅森素數的乘積」 等價於 「這個數的約數和是2的冪次」,但是不能重複,比如說3是梅森素數,9就不滿足約數和為2的冪。詳見uvalive 2955

對於最大流無向圖雙向建邊是4條邊。臨接表建圖注意反向容量為0。如果有向圖同樣也是反向邊為0.鄰接矩陣可以直接memset(cap,0);  //總結的暫時可能需要糾正。

關於點聯通度 邊聯通度

競賽圖:圖中的任意兩點間有且僅有一條有向弧連線

求競賽圖中的哈密頓路的演算法:

首先,由數學歸納法可證競賽圖在n>=2時必存在哈密頓路;

(1)n=2時顯然;

(2)假設n=k時,結論成立,哈密頓路為v1,v2,...,vi,...,vk;

現新增第k+1個結點,若存在弧和弧,則可得哈密頓迴路v1,v2,...,vi,vk+1,vi+1,...,vk;

若不存在上述的vi,考慮到vk+1與v1~vk的連通狀況,則只有下面種原哈密頓路的情況:

1.所有的vi(1,那麼可得哈密頓迴路v1,v2,...,vi,...,vk,vk+1;

2.所有的vi(1,那麼可得哈密頓迴路vk+1,v1,v2,...,vi,...,vk;

3.存在乙個中間結點m,使得所有的vi(1<=i<=m)與vk+1的弧方向為,所有的vj(m,這時依然可以構造哈密頓路 v1,v2,...,vi,...,vk,vk+1;

引用:有一堆個數為n的石子,遊戲雙方輪流取石子,滿足:

1)先手不能在第一次把所有的石子取完;

2)之後每次可以取的石子數介於1到對手剛取的石子數的2倍之間(包含1和對手剛取的石子數的2倍)。

約定取走最後乙個石子的人為贏家,求必敗態。

這個和之前的wythoff』s game 和取石子遊戲 有乙個很大的不同點,就是遊戲規則的動態化。之前的規則中,每次可以取的石子的策略集合是基本固定的,但是這次有規則2:一方每次可以取的石子數依賴於對手剛才取的石子數。

這個遊戲叫做fibonacci nim,肯定和fibonacci數列:f[n]:1,2,3,5,8,13,21,34,55,89,… 有密切的關係。如果試驗一番之後,可以猜測:先手勝當且僅當n不是fibonacci數。換句話說,必敗態構成fibonacci數列。

anti-num 普通去石子遊戲取光著輸,結論    定義:若一堆中僅有1根火柴,則被稱為孤單堆。若大於1根,則稱為充裕堆。

定義:t態中,若充裕堆的堆數大於等於2,則稱為完全利他態,用t2表示;若充裕堆的堆數等於0,則稱為部分利他態,用t0表示。 

必敗態: t2,s0 

必勝態:    s2,s1,t0.

先手必勝(1)當且僅當所有石子數為1,且遊戲sg值為0;有些堆的石子數大於1,且sg不為0;

題目:多棵樹,刪邊遊戲,最後一次操作的人輸

其中樹的刪邊遊戲:葉子節點的sg值為0;中間節點的sg值為它的所有子節點的sg值加1 後的異或和。

anti-sg:先手必勝當且僅當:(1)遊戲的sg函式不為0且遊戲中某個單一遊戲的sg函式大於1;(2)遊戲的sg函式為0且遊戲中沒有單一遊戲的sg函式大於1。

k倍動態減法

c(n,2*(i+1))*can(i+1)=(n-2*i)*(n-2*i-1)/(i+1)/(i+2)  *  (c(n,2*i)*can(i))

a^x % m = a^(x%phi(m)+phi(m)) % m (x >= phi(m))

若乙個數可以寫成若干個不同的梅森素數的乘積,那麼這個數的所以因子和可以寫成2x.

232−1的範圍內只有8個梅森素數 冪分別為2, 3, 5, 7, 13, 17, 19, 31

在初等數論中,威爾遜定理給出了判定乙個自然數是否為素數的充分必要條件。

即:當且僅當p為素數時:( p -1 )! ≡ -1 ( mod p )

也可以寫作:若p為質數,則p可整除(p-1)!+1

lucas定理

a、b是非負整數,p是質數。ab寫成p進製:a=a[n]a[n-1]...a[0],b=b[n]b[n-1]...b[0]。

則組合數c(a,b)與c(a[n],b[n])*c(a[n-1],b[n-1])*...*c(a[0],b[0])  modp同餘

即:lucas(n,m,p)=c(n%p,m%p)*lucas(n/p,m/p,p) 

//有這麼個公式cosa=cosb*cosc+sinb*sinc*cosa

//其中小寫a,b,c表示球面三角形邊長所對應的圓心角 大寫a表示三角形內角,求球面三角形內角可用

struct node

;//計算圓心角lat表示緯度,lng表示經度,-90 <= w <= 90;

//計算兩點所在大圓劣弧對應圓心角,0 <= angle <= pi;

double angle(double lng1,double lat1,double lng2,double lat2)

C 刷題過程中的一些 tricks(持續更新)

遍歷之後返回的自動型別是乙個pair,注意此處map的話返回有順序的,而unordered map 沒有順序 map int,char map for auto element map char int string a 1 int b a 0 int string int a 12345 stri...

收集的一些題or結論

兩條單鏈表如果交叉的話不可能一條有環一條沒有環。已知有個rand7 的函式,返回1到7隨機自然數,讓利用這個rand7 構造rand10 隨機1 10 rand7 1 7得到乙個離散整數集合a 其中每個整數的出現概率也都是1 7。而rand7 得到的集合b 中每個整數出現的概率也是1 7。顯然集合a...

收集的一些題or結論2

include using namespace std 已知字串裡的字元是互不相同的,按照字典序輸出所有的組合,比如ab輸出aa,ab,ba,bb。思路 1 要字典序,所以要首先對陣列排序 氣泡排序的第一層迴圈只是用來控制做多少次的,和第二層迴圈基本沒聯絡 2 乙個完整的輸出 填入乙個字元 填入剩下...