把作過的題爭取都看一遍,弄明白出現過的全部問題,省一不是問題!算法
具體一點的話,那就把黃題及以上寫一下思路吧。(按題號)windows
2019年11月6日數組
Y P1017進制轉換 將一個整數裝變成某負進制 類比正進制的轉換,手寫一下負數的模運算(整數模運算後判負加至非負)框架
Y P1020導彈攔截 用單調隊列求最長上升子序列(nlogn),同位置下元素越小越優;最少多少條不降低子序列 <=> 最長降低子序列(Dilworth定理)函數
Y P1022計算器的改良 模擬 統計等號左右兩邊常數和和係數和,而後移項、同分。注意退出循環的條件。wo字符串處理是真的弱啊。。優化
Y P1024一元三次方程求解 根據零點的性質(變號)求便可,由於題目中已經告訴解間的距離。注意區間移動時要避免在邊界處重合!spa
Y P1025數的劃分 搜索|dp 原來寫的搜索,如今一看先想到了dp 50ms -> 10msf[第幾個數][上一個是什麼][用了多少了]感性的理解上應該還能夠再減枝、加記憶化。code
Y P1057傳球遊戲 環上的dp。注意邊界的處理,區分n與m的意義!blog
2019年11月7日排序
Y P1071潛伏者 模擬,題意要求每一個字母都至少出現一次
Y P1076尋寶 模擬
Y P1090合併果子 貪心|哈夫曼樹 因爲沒有位置影響因此不用dp
Y P1091合唱隊形 正反向各一遍求出每一個點在兩意義下的lis,最後O(n)求答案
Y P1111修復公路 並查集||最小生成樹 最先聯通時間,能夠最小生成樹求到每點的最短期,也能夠把邊按時間排序用並查集鏈接求.並查集代碼更短.
Y P1113雜務 拓撲排序求最長鏈 拓撲圖dp,按順序更新就好了.
(黃題寫不完了,先看藍題吧)
2019年11月12日
B貨車運輸 樹lca 樹上路徑具備可並性質的信息可用rmq維護
B火柴排隊 逆序對|貪心 相同rank的匹配差值才最小,因此求a序列元素相對位置在b序列相對位置映射中的逆序對
B聰明的質檢員 二分答案×前綴和 每次二分出W後都求一遍前綴和,看似麻煩實則省去了相交區間的大量重複運算;前綴和不是直接保存最終答案,而是加速問題中重疊部分的求解,至於每一個區間的長度最後乘上便可,複雜度不變。
B HH的項鍊 樹狀數組|前綴和 爲了處理重複只求一遍的問題採起了離線按右端點排序和記錄每一個位置的上一個相同顏色位置每次遇到一種顏色進行一次單點減和一次單點加的策略
B 鬥地主 搜索 儘可能減小搜索樹的淺層的分支能夠更快找到答案,從而更好得進行最優化剪枝
B 關押罪犯 並查集 採用二倍數組或額外一個數組來維護對立關係。二倍數組更方便
B 矩陣取數遊戲 dp+高精度 對於相互獨立的行分別進行dp求解,最後合併答案。高精度要熟練!
B 最優貿易 spfa×dp 最短路模型的dp,將轉移方程改成到節點的最小价格便可。注意無權圖的Edge結構體不要寫上wi,不然死得很慘!!
B 國王遊戲 貪心×高精 列式後設量,交換相鄰兩項 消除同類項,根據性質排序。高精除!
B 災後重建 Floyd 本質是Floyd,只是便外層循環爲時間順序。考察對Floyd的理解。
B 小木棍 搜索剪枝 框架:一根拼完再搜下一根 剪枝:長棍不行短棍湊出的相同長棍也不行;先搜長棍再搜短棍能夠減小搜索樹在淺層的分支;同一根棍從小向大搜;只有長度是總長的因子纔可能成爲答案
B 垃圾陷阱 線性dp 維度之間的轉化,數組值只有0/1感性理解上會有些浪費。
B 銀河英雄傳輸 加權並查集!!
1 int find(int x){ 2 if(fa[x] == x)return x; 3 int rt = find(fa[x]); 4 d[x] += d[fa[x]]; 5 return fa[x] = rt; 6 } 7 8 void merge(int i,int j){ 9 int x = find(i),y = find(j); 10 fa[x] = y; 11 d[x] = size[y]; 12 size[y] += size[x]; 13 }
d[]距根的距離,size[]子樹大小。合併時新兒子的距離更新爲父親大小,而後將新兒子的大小加到父親上。路徑壓縮時先更新祖先再更新本身的信息。
B 星球大戰 並查集 正難則反:正着拆集合很差維護就倒着並集合。看準了數據範圍!
B 最大數 線段樹|單調棧+二分 用線段樹維護區間最大值,新加點至關因而add(++cnt);可是對於這道題來講由於只要查詢自右端點開始一段區間的最大值,因此位置偏左而值又偏小的元素必定不如位置靠右且更大的元素,所以能夠維護一個單調遞減的單調棧,每次在棧中二分位置便可。
B 瑞瑞的木棍 歐拉回路+字典樹 區分歐拉路。歐拉路的條件是每一個點都有偶數個度或有且僅有兩個奇數度的點;歐拉回路的條件是每一個點都是偶度。這就好了?聯通才有歐拉路!!
B 無序字母對 歐拉路 若是圖聯通且全部點的度數均爲偶數或有且僅有兩個點爲奇數度,則存在歐拉路。若存在歐拉路,則若存在奇數度的點那麼就從奇數度的點出發不然從任一點出發dfs便可獲得歐拉路。求字典序最小隻要貪心的選就行了。聯通是歐拉路的必要條件!
B 矩形 二維前綴和 邊界上的點數=大矩形-內部小矩形。這道題應該是評錯了...
號外:512Mb = 2^9Mb = 2^19Kb = 2^29B = 2^32bit ≈ int a[(int)1e8] "兩年oi一場空,mle見祖宗..."
B 平均數 二分+sliding windows模型判斷 與s[i-m]取min就能保證序列的長度大於等於m。
B [模板]最長公共子序列 要注意題目,但不要被誤導。。由於給出的是一個排列,因此至關於在b序列上求a序列映射的lis。
B 砝碼稱重 dfs×01揹包 如題,搜索到每一個狀態後dp更新答案。
B 通往奧格瑞瑪的道路 二分+dijkstra 」通過城市中最多一次收費的最小值「經典的二分題的表述。二分後不走比mid更貴的點,而後吧減的血看做長度跑最短路便可。
B 路徑統計 最短路 再開一個數組統計到每一個點的最短路的方案數,而後根據加法原理遞推便可。
B 跑路 倍增+Floyd 觀察到n很小,邊權都爲一,而跑路器又是跑2的指數次方,因此直接建鄰接矩陣存點與點的可達性,再多出一維來存邊長到了2的幾回方便可(2^k 只能由2^k-1+2^k-1而不能由2^k-1+2^k-2推來)。由於不管是多少次方都在相同時間內跑完,因此最後合併爲一個矩陣。最後怎麼跑都無所謂了。這道題的關鍵在於要想到開矩陣處理新的長邊。
B 翻轉游戲增強版 加不增強都差很少。無非就是裸的爆搜過不去罷了。觀察性質發現只要第一行肯定了,整個局面就肯定了。因此之枚舉第一行的狀態便可。推而廣之:若某一部分能夠決定整個局面,那麼不妨暴力枚舉這個部分,而後判斷造成的局面合不合法。
B 黑匣子 對頂堆 對頂堆不只能夠求中位數,還能夠在線求排名爲i的數。只要改變兩個堆的大小就好了。
B 斐波那契數列 矩陣快速冪 對於n ≤ 10^10^6 或 2^63這樣的數據範圍時,要想到矩陣快速冪是一個log級別的算法。
B 車站分級 拓撲排序 向等級變化的方向連邊,而後拓撲排序求最長鏈(最長鏈是大小關係連續單調變化的最長段即最小級數)
B 消息擴散 tarjan縮點 taijan的裸題好像都評藍了..入度爲0的強連通份量必定且只須要它們獲得消息,入度不爲零的點就能夠從他們入度的源頭拿來消息了。因此答案就是入度爲0的scc數目。
B 維護序列 線段樹×標記+標記區間和 挺裸的...先乘再加,這樣下放標記時只要將兩標記都乘一下就行了。不然加標記下放的處理會使子節點的乘標記成爲實數。
B 選課 樹形dp 樹上的揹包,再每一個節點上跑它子樹的01揹包便可。
B 二叉蘋果樹 樹形dp 狀態是f[root][減去幾個] = 這個子樹中的最大蘋果數
B 食物鏈 並查集 三種個關係,三倍數組維護便可。狀況頗有限,不要瘋狂無腦取模。。分類討論可使代碼更清晰。。
1 if(find(u) == find(v)||find(v+n) == find(u))ans++; 2 else{ 3 fa[find(u+n)] = find(v); 4 fa[find(u+n+n)] = find(v+n); 5 fa[find(u)] = find(v+n+n); 6 }
B [模板]nim遊戲 博弈論 各堆數目異或和爲零的局面行動者必敗。這類題要分析每種狀態分別能夠轉移到那些狀態,若能夠轉移到必敗態則該狀態爲必勝態,若不能轉移到必敗態則該狀態爲必敗態,有點必要充分條件的意味。
B 取石子游戲 威佐夫博弈
直接說結論了,若兩堆物品的初始值爲(x,y),且x<y,則另z=y-x;
記w=(int)[((sqrt(5)+1)/2)*z ];
若w=x,則先手必敗,不然先手必勝。
——摘自洛谷題解
結論題...證實真心看不懂,隱隱約約感受這種題能夠看成圖論題dfs去拿部分分,可是這種玄學的式子誰能在考場上推出來啊。。
B 消防局的設立 樹形dp 很典型,一道與其餘樹形dp套路不徹底同樣的題。第二維存到根節點的距離(-2~2),是樹形dp的另外一種模型吧
B 解方程 秦九韶算法 觀察式子性質,充分利用計算機的長處,遞歸求解秦九韶算法。考上少遇到這種題要想辦法把式子變造成利於求解的形式。
B 騎士精神 ida* 下限爲與目標的區別個數。注意ida*預估函數必定要優於答案,不然可能致使答案被預估後沒法取出。
B 受歡迎的牛 scc 顯然一個聯通塊內的牛地位是平等的。惟一的出度爲0的scc中的牛就是明星,由於他們除了所在scc內的牛都不喜歡,因此其餘牛都不可能成爲明星;又由於只有這麼一個,因此其餘牛都只能指向這個scc,因此這個scc的大小即爲答案。
B 疊積木 加權並查集 同銀河英雄傳說,題意差很少,代碼都差很少。。
B 最短路 最短路 題目和算法同樣,,只要注意過程當中不要取模就行了,必定要看明白是取模後最大仍是最大的取模輸出。
2019/11/13
B 二進制方程 並查集+高精 相同字母表明的含義相同,因此將相同的字母放到同一集合中,表示含義相同(這裏把字母拆成長度個元素)。最後每一個集合均有兩種選擇,乘法原理乘出答案。整道題中只有最後輸出答案時用到了高精度,因此無需寫結構體,直接數組模擬便可。
P2513...
2019年11月14日
B P2513 逆序對數列 前綴和優化dp 表面上看起來是構造,實則是dp.f[i][j] = 方案數(i:考慮到第i個數,j:逆序對數)
B 校園網 tarjan縮點 每加一條邊均可以使一個入度爲0的點和一個出度爲0的點合法,因此答案爲兩種點數目的較大值.此處有一坑點——若整張圖強連通,那麼僅有一個出入度均爲0的點,此時不須要加邊,可是直接去取max會取出1來,因此要特判過去。。
B 冗餘道路 tarjan縮點 每加一條邊能夠消去兩個非法點,每一個非法點至少須要一條邊,故最終答案爲(n+1)/2;