1.關於hash算法
剛開始學hash是爲了比較字符串,後來用hash_table來存儲大量元素、快速查找。最近想到的一個用法是,若是咱們能給每一個不一樣的元素對應一個的$p^i$的話,能夠將一個集合轉化爲一個哈希值,從而快速比較兩個集合是否相等。網絡
隊友C:hash是不可撤銷的!數據結構
然而真的是這樣嗎?這個問題取決於咱們決定$i$的方式。spa
在字符串比較中,咱們同時須要位置和內容信息,有了每一個前綴的hash值,咱們顯然知道前面的每一個位置對應的$i$,能夠經過調整得到任意區間的hash值。雖然區間數($n^2$)複雜度每每是沒法接受的,可是在須要考察的區間長度爲定值時這個算法仍是很優秀的。遊戲
再看上面關於集合比較的問題,須要的信息只有內容,hash至關於一個模糊化的存儲,只保留了集體信息而丟棄了單獨元素的信息。雖然這種處理不支持查詢某個元素是否在集合中,可是若是已知一個元素在集合中,我又知道它加入時對應的$i$,刪除操做就是可行的。字符串
因此咱們再考慮hash是否可撤銷,就是看可否找到正確的$i$,以及可否準確、不過分地進行刪除。數學
咱們通常印象中的hash每每有大素數、unsigned long long一類的特徵。可是hash本質上就是一種「模糊化」的思想,把沒法承受的存儲、比對壓縮到只剩下某些關鍵信息。其實求和、取max等等操做均可以是看做廣義的hash,用一個結果來表明這個集合中我關注的特質。反向推想,一些難以處理的比較問題也能夠嘗試用hash解決,如兩個集合是否相同。甚至抽取的特徵也不必定涵蓋了全部我須要的信息,餘下就是在正確率和效率之間尋找平衡,神經網絡等處理大規模數據的算法都有這種思想的體現。hash的正確機率,一是要看不一樣集合是否對應了不一樣的hash結果,二是要看這個結果是否能充分反映我關注的信息。hash
eg:有n個點和m條無向邊,邊的長度均爲1。問按順序加邊,加到多少條時開始存在從a到b的長度爲5的點不重複路徑,其中a和b是兩個給定點。n、m<=1e5。table
2.博弈論哲學效率
某些srs看起來一本正經胡說八道,實際上只會把博弈論推給隊友,這是毋庸置疑的。
反證法:假設這個狀態必敗,必然先手能夠選擇另外一操做來把此處的選擇留給後手,與必敗矛盾。可能只存在於較大規模或具有一些基本特徵的局面下,如至少有兩個兒子的樹節點等。小範圍仍需手玩。
分離法:經過簡單操做把原局面分爲無關的幾部分,或者刪除原局面的一部分,總之把遊戲規模變小。
Excel法:當隊友C開始用Excel枚舉每種局面的結果,他很快就會AC了。Excel確實是手動打表的好幫手,效率遠勝紙質計算。
3.笛卡爾模型化
隊友C:如今咱們就獲得一個經典的二維數點/三維偏序問題。
把問題轉化爲一個數點問題、區間問題經常讓事情變得簡單。一對必須同時選取的數能夠看做區間的左右端點、兩種權值要求能夠看做平面上的兩維、元素的標號是數軸上的一維,如此種種。題目的要求自己沒有改變,咱們的思惟卻慣於快速應對這種形式。代碼也能夠有序地分紅轉化、處理兩部分,甚至做證實、檢查時能夠徹底分開考慮。
笛卡爾座標系中的模型老是更容易和數據結構創建聯繫。咱們對數據結構的認識也不該該僅僅從維護信息、算法複雜度角度,還要考慮它有怎樣的降維效果,它自己的特質適合怎樣把我須要的答案分離、統計。處理信息的順序,也即時間維度,也能夠做爲解決問題的輔助,有天然降維的功能。
eg:n 我的,選白色、黑色各有一個權值,要使全部人選擇後權值極差最小,而且有一些兩我的不能選同色的限制。n<=1e5。
4.數據範圍騙局
「操做數不超過m,m<=1e18」——但實際上按照題目規則,超過2n的操做都是沒有意義的。
「k是兩整點之間距離的平方,k<=1e7」——能夠拆成兩數平方之和的數字在這個區間裏並很少,能夠預處理出全部組合方案,從而把兩個維度分開,實現快速統計和查找。
「強制在線,每次輸入數據須要^opt」——若opt只能爲0/1/2之類的小數字,^的結果十分有限,甚至能夠根據最後答案倒推。
題目中看似很大的輸入數據,可能因爲必須知足某些規則而變得十分有限。讓出題人造數據時感到麻煩的限制,或許偏偏是選手的可乘之機。從出題人的角度考慮輸入數據可能性,說不定能幫助發現題目性質。
本文送給沒有出現可是獨自承擔了絕大部分數學題的隊友Y,以及另外一位我十分但願但不能成爲個人隊友的同窗。