原创 [數論] LOJ #510. 「LibreOJ NOI Round #1」北校門外的回憶

這個題跟樹狀數組沒有半毛錢關係 首先這是一個最低位翻倍的過程,如果這一位最終會變成 0 ,那麼步數是 O(logn) 的? 要是這一位不能變成 0 ,也就是在環上跑了,似乎跑到環上的步數也是 O(logn) 的? 然後就

原创 [遞推] Codeforces 660E Educational Codeforces Round 11 E. Different Subsets For All Tuples

對於一個確定串s ,求不同子序列的個數有經典dp fi,si=∑jfi−1,j fi,j=fi−1,j,j≠si 因爲轉移都是形式一樣的我試着把所有串的fi 都加起來,然後就發現Fj 除了j=ϕ 之外都是一樣的,然後就記錄兩個

原创 [遞推 || 容斥 FFT] SRM 717 div1 DerangementsStrikeBack

首先像我這種無腦的人可以大力上fft fin!=∑j=0i(−1)j(ij)(n+i−j)!n! 然而考慮經典錯排的遞推公式 dn=(n−1)(dn−1+dn−2) 這個東西的遞推式是 把第n 個和n−1 的錯排其中一個交

原创 [通信題] JOI Open Contest 2017 Amusement Park

題目大意: 這是一道通信題 第一個程序 輸入一張無向圖的點和邊 再給一個2^60以內的數 第一個程序要給每個點賦值0/1 第二個程序也會讀入這張圖 然後讀入當前點編號以及當前點的值,其他點的值一律不知,每次可以調用一個函數走

原创 [分塊] Codeforces 436F Zepto Code Rush 2014 F. Banners

可以轉化成區間加,詢問ai×i 的最大值 這個不好維護,分塊,零散的加,直接重構整塊,否則在塊上打標記 同時我們在塊上還要維護當前最大值所在的 i 和 接下來至少要整塊加多少次才能使得最大值變化 每次在塊上打標記,當達到臨

原创 [DP 分塊] UOJ #300. 【CTSC2017】吉夫特

DP的轉移是一個子集和的形式 直接做是318 按照高9位 低9位分塊可以做到29×39=69 #include<cstdio> #include<cstdlib> #include<algorithm> using names

原创 [分塊 隨機Hash] Romanian IOI 2017 Selection #6 Jolteon

傳送門 問有多少個區間,出現過的數出現次數都是奇數 給每個數隨機一個hash值 然後區間中所有數的xor和 和 所有pre<l≤i≤r 的數的異或和 相同 那麼就合法 枚舉右端點,新增一個數會對一段造成影響 變成區間異或

原创 [最短路 主席樹 Hash] 51Nod 算法馬拉松26 E Travel

跟這個題一毛一樣,那個題還高明一點,還會進位 #include<cstdio> #include<cstdlib> #include<algorithm> #include<queue> #include<map> using n

原创 [貪心 構造] SRM 717 div1 ScoresSequence

首先他保證圖唯一確定,那麼可以把圖給構出來 類似這個題,按照出度從大到小排序,出度最大那個點怎麼分配,類似無向圖可圖判定,應該是向出度小的點連,使得出度大的向他連,讓出度大的出度減小 // BEGIN CUT HERE #i

原创 [FWT] 51Nod 算法馬拉松26 A A國的貿易

相當於每次每個點會變成自己和與自己相差一個二進制位的數的和 直接FWT 快速冪 #include<cstdio> #include<cstdlib> #include<algorithm> using namespace std

原创 [最短路 Bfs 二維線段樹] JOI Open Contest 2017 Golf

題目大意:給出平面上n個不相交的矩形障礙,以及起點和終點,要求從起點走到終點的折線段段數最少 VIEW PROBLEM - GOLF (JOI17_GOLF) 首先最優解肯定可以只在矩形邊所在的直線以及過起點終點平行座標軸的直線

原创 [幾何 掃描線 最大子段和] JOI Open Contest 2017 Bulldozer

題目大意:給出平面上n個帶權點,有正有負,求平面上兩條平行直線之間的點權和最大是多少 VIEW PROBLEM - BULLDOZER (JOI17_BULLDOZER) 直接枚舉斜率,點按照距離排序後是一個最大子段和問題 然

原创 [鏈分治] LOJ #511. 「LibreOJ NOI Round #1」驗題

直接按照字典序類似逐位確定 先從後往前諸位確定確定答案和當前的LCP 然後在從前往後逐位確定 然後就轉化爲一個 某些不能選 某些必須選 某些隨意 的獨立集計數 鏈分治 #include<cstdio> #include<c

原创 [最小生成樹] Codeforces 632F Educational Codeforces Round 9 F. Magic Matrix & SRM 687 div1 AllGraphCuts

Magic Matrix 把a 矩陣當成鄰接矩陣,設b 爲兩點間路徑最大值的最小值,那麼ai,j≥bi,j ,然後ai,j≤max(ai,k1,ak1,k2,⋯,akm,j) ,所以ai,j≤bi,j 那麼a=b ,求b 只要取

原创 [單調棧 線段樹] Codeforces 407E Round #239 (Div. 1) E. k-d-sequence

首先肯定是一段模 d 相同的數 然後枚舉左端點 那麼右端點應該滿足條件 數字不重複出現且 maxvl,r−minvl,r≤r−l+k ,這個最大最小值是除過 d 的 也就是maxvl,r−minvl,r−r≤k−l 左端