原创 Adnan and the Burned drivers

題目鏈接:Adnan and the Burned drivers 顯然維護正反字符串的哈希值,那麼直接判斷即可。 由於有修改,所以用線段樹維護。 AC代碼: #pragma GCC optimize("-Ofast","-f

原创 [COCI 2009] PASIJANS

題目鏈接:[COCI 2009] PASIJANS 顯然我們每次貪心用堆維護最小的。 但是如果有相同的怎麼選擇呢?我們就要往後比較了。所以就是一個後綴排序的問題了。 但是要注意,字符串4 2是大於字符串4 2 3的。 所以我們在

原创 Mountaineers

題目鏈接:Mountaineers 最大值最小的路徑肯定在MST上面,那麼我們直接求一個MST然後就是任意兩點之間的樹上路徑最小值即可。 樹上倍增即可。但是要注意同一個點的情況。 AC代碼: #pragma GCC optim

原创 Namomo子串

題目鏈接:Namomo子串 考慮從前往後dp即可。 dp[i]爲以i開始的滿足第一個是輔音第二個元音,然後重複的子串長度。 然後枚舉兩個相鄰的計算即可。 AC代碼: #pragma GCC optimize("-Ofast",

原创 墨墨的等式

題目鏈接:墨墨的等式 顯然我們對%a[1]得到每個能到的最小值,然後再用a[1]遞加上去即可。 得到能到的最小值跑同餘最短路即可。 但是要注意計算的時候比如計算x,那麼要d[i]<=x才能計算。 AC代碼: #pragma G

原创 Codeforces - Array and Operations

題目鏈接:Codeforces - Array and Operations 很顯然的二分圖。只不過建圖麻煩,其實也不是很麻煩,暴力搞就行。 把因子單獨拿出來建圖。 AC代碼: #pragma GCC optimize("-O

原创 Divisors of the Divisors of An Integer

題目鏈接:Divisors of the Divisors of An Integer 我們直接看每個質因子的貢獻即可。 假設這個質因子有x個,那麼我們構造某一個數的時候可以選0,1,2,3,…,x個,然後對應的因子就有1,2,

原创 Sums

題目鏈接:Sums 我們讓a[1]爲模數,然後用a[2]->a[n]來構造%a[1]的每個數的最小值。 然後直接看d[x%a[1]]<=x,那麼就是有解的。 AC代碼: #pragma GCC optimize("-Ofast

原创 [CCO 2014]Troy 與三角形

題目鏈接:[CCO 2014]Troy 與三角形 我們對每一個點作爲三角形的最上面頂點然後向下考慮,並且利用前綴和優化。 複雜度是n^3的。 但是我們如果知道上一個點的答案,那麼之後的就可以少判斷很多,相當於是記憶化,每一行最多

原创 Tweetuzki 愛軍訓

題目鏈接:Tweetuzki 愛軍訓 如果直接去做是很複雜的。 我們假設全部都是第一次出隊,那麼我們可以發現,如果第i個改成第二次出隊,那麼答案增加: (n-i)*w-sum(i+1,n) 然後我們從後往前找第二次出隊的,我們可

原创 LYZ-Ice Skates

題目鏈接:LYZ-Ice Skates 顯然是一個二分圖匹配問題,所以我們可以想到用霍爾定理來做。 但是我們不能暴力枚舉左邊點的所有情況,但是我們其實只需要找到左邊所有情況的最小值即可。我們顯然可以發現最小值一定是一個連續的區間

原创 Censoring S

題目鏈接:Censoring S 因爲每次都是找一個個位置,所以我們可以考慮用一個棧維護最早出現的位置。 然後怎麼判斷當前棧頂的字符串是否滿足呢?AC自動機或者字符串hash都可。 AC代碼: #pragma GCC opti

原创 Tweetuzki 愛序列

題目鏈接:Tweetuzki 愛序列 每個數字能到的數字最多隻有兩個。因爲每次是/3或者*2。說明數字是不重複的。也就是無環。 所以直接DAG最長路dp即可。 AC代碼: #pragma GCC optimize("-Ofas

原创 kry loves 2048

題目鏈接:kry loves 2048 顯示是每次選最小的兩個組合,然後一直求max。 這個數據範圍可以直接桶排序,然後用兩個隊列維護最小值。 AC代碼: #pragma GCC optimize("-Ofast","-fun

原创 夜遊 ECNU

題目鏈接:夜遊 ECNU 顯然有一個n*n的dp方程。 但是我們可以按照x排序,之後用fenwick維護y的前綴和,然後計數即可。 AC代碼: #pragma GCC optimize("-Ofast","-funroll-a