原创 CodeForces - 1315D Recommendations 並查集

CodeForces - 1315D Recommendations 並查集 一開始想用優先隊列做,一直TLE 我一開始是按照序號從小到大,時間從小到大排序的,但是這樣是不對的,對於序號重複的值而言,時間越小就可以進行越多次操作(

原创 CodeForces - 1365

CodeForces - 1365 A - Matrix Game 可用的行和可用的列的最小值就是兩個人總共可以進行的回合數 int a[maxn][maxn],t,n,m,row[maxn],col[maxn]; int ma

原创 Editor Page50 對頂棧

Editor Page50 對頂棧 活了一輩子好像沒用過棧的size函數…就當現在學到了吧 PS:由於插入的整數可以爲負數,所以一定要將f[0]f[0]f[0]初始化爲-INF 代碼: #pragma GCC optimize(1

原创 Team Queue Page55 隊列

Team Queue Page55 隊列 隊列的應用 簡單來講其實就是一個雙層隊列,第一層是隊伍,第二層是隊伍裏的人 代碼: #pragma GCC optimize(1) #pragma GCC optimize(2) #pra

原创 Palindrome Page69 哈希+二分/馬拉車

Palindrome Page69 哈希+二分/馬拉車 做法一: 分析:對於一個迴文串,一共會有兩種情況: 長度爲奇數,s[i−p,i]=reverse(s[i,i+p])s[i-p,i]=reverse(s[i,i+p])s[

原创 占卜DIY Page48 模擬

占卜DIY Page48 模擬 數組模擬鏈表,取頭取尾加頭加尾四種操作 把區間在一開始定義爲[100,100][100,100][100,100]可以不用考慮區間邊界取到負數,比如p[i].a[−2]p[i].a[-2]p[i].

原创 Prime Distance Page138 區間質數

Prime Distance Page138 區間質數 由於L,R太大,一開始想到用map表示該值是否爲質數,後來一直T,把質數篩選過程優化到(R−L)loglog(R)(R-L)loglog(R)(R−L)loglog(R)還是

原创 To the Max Page30 一維/二維最大字段和

To the Max Page30 一維/二維最大字段和 對於一維最大字段和的推導過程 設dp[i]dp[i]dp[i]爲以第iii個元素爲結束的子段的最大子段和 其轉移方程爲:dp[i]=max(a[i],dp[i−1]+a[i

原创 括號畫家 Page90 棧

括號畫家 Page90 棧 從前往後遍歷,會出現以下兩種情況: 1.對於任何的′(′,′[′,′{′'(','[','\{'′(′,′[′,′{′,只能與後面的元素匹配,故直接入棧 2.對於任何的′)′,′]′,′}′')',']

原创 費解的開關 Page15 優化枚舉

費解的開關 Page15 優化枚舉 如果暴力枚舉複雜度是O(232)O(2^{32})O(232) 根據性質可以先確定第一層,層層遞推過去,複雜度被優化到了O(25×52)O(2^5×5^2)O(25×52) 代碼: #pragm

原创 CodeForces - 1354D Multiset 權值線段樹/樹狀數組+二分

CodeForces - 1354D Multiset 權值線段樹/樹狀數組+二分 權值線段樹可以過,普通的單點修改查詢線段樹TLE 做法一:線段樹 const int maxn=1e6+7; const int INF=1e9;

原创 前綴統計 Page79 字典樹

前綴統計 Page79 字典樹 初學字典樹 如果僅將結尾標記,是不嚴謹的,多個相同字符串的情況就會被默認視爲1個字符串 代碼: #pragma GCC optimize(1) #pragma GCC optimize(2) #pr

原创 可達性統計 Page99 拓撲排序+bitset

可達性統計 Page99 拓撲排序+bitset 一開始看到題解的狀態壓縮,尋思30000的數據應該如何壓縮 STL的bitset支持位運算的修改,提供了簡單的解決方法 bitset<5> b; b.count();//返回所有

原创 CodeForces - 1362

CodeForces - 1362 A - Johnny and Ancient Computer int t; ll a,b; int main() { scanf("%d",&t); while(t--)

原创 CodeForces - 1364

CodeForces - 1364 A - XXXXX 1.如果總和不被x整除,則輸出n 2.如果每個數都被x整除,則輸出-1 3.找到最左端的不被x整除的數和最右端不被x整除的數 int t,n,x,a[maxn]; int