原创 相似的字串

題目:相似的字串 題解:這個答案滿足單調性,所以可以用二分寫。用Hash來判斷是否有相同的子串,對於其中可能有重疊的部分,用map將字串相同的進行比較。 #include <bits/stdc++.h> using namespa

原创 最少攔截系統(LIS)

題目:最少攔截系統 題解:LIS問題,求最長升序子序列。 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 7e6+1

原创 Housewife Wind

題目:Housewife Wind 題解:題目修改的是邊權,求的和也是邊權之和,可以先建立一棵樹,然後將邊權移到下面的點變成點權,求和的時候只要再將LCA(x,y)的點權減掉就可以了。 邊權變成點權的時候需要注意是按照深度大小往下

原创 樹的統計Count

題目:樹的統計Count #include <vector> #include <cstdio> #include <string> #include <cstring> //#include <sstream> //#inclu

原创 牛妹喫豆子

題目:牛妹喫豆子 題解:這道題用的二維差分和二維前綴和。 前綴和與差分 #include <bits/stdc++.h> #include <cstdlib> using namespace std; typedef long l

原创 D. Dreamoon Likes Sequences

題目:D. Dreamoon Likes Sequences 題解:這是個數論思維題。。想了好長時間。 1~1是個整體,2 ~ 3 是個整體,4 ~ 7 是個整體。。。。 爲什麼這麼說呢?就用 2和3舉例子,2和3最高二進制位都是

原创 關於樹的直徑問題

將求直徑的問題分成三類。 一、對於無邊權、有點權的樹的直徑的求解 二、關於有邊權、無點權的樹的直徑的求解 //此時的dp數組默認都爲0 void dfs(int u,int fa){ for(int i = head[u]

原创 中位因數

題目:中位因數 題解:找到i的倍數j,那麼i和j/i就有可能是j的中位數,保證i<j/i,既然是中位數,那麼i就應該所有因子左邊的最大值,所以用a來維護。 #include<bits/stdc++.h> using namespa

原创 序列卷積之和

題目:序列卷積之和 題解:這題打表找規律,然後用前綴和。 每對i*j出現了多少對。 第一行相當於(a[1]*4+a[2]*3+a[3]*2+a[4]*1)*1 第二行相當於(a[2]*3+a[3]*2+a[4]*1)*2 第三行

原创 煩人的依賴

題目:煩人的依賴 題解:用拓撲排序+優先隊列。 把所有入度爲0的點都加入優先隊列。竟然卡vector #include<bits/stdc++.h> using namespace std; typedef long long l

原创 Paint House

題目: There are a row of n houses, each house can be painted with one of the three colors: red, blue or green. The co

原创 簡單瞎搞題

題目:簡單瞎搞題 題解:這題用bitset+dp優化。 dp[i],表示在第i段的時候,此時要多少個滿足題目的解。 /* ┏┓   ┏┓ *┏┛┻━━━┛┻┓ *┃       ┃   *┃   ━   ┃ *┃ ┳┛ ┗┳ ┃

原创 POJ1845:Sumdiv

題目:Sumdiv 題解:先用質因子分解 A = p1a1 p2a2 p3a3…pnan (p1,p2,p3…爲質數) AB = p1a1B p2a2B p3a3B…pnanB (p1,p2,p3…爲質數) 所求的

原创 對於ax+by=c,求得使x爲最小得非負整數。

#include <iostream> #include <cstdlib> #include <cmath> using namespace std; typedef long long ll; typedef pair<int

原创 D. Constant Palindrome Sum

題目:D. Constant Palindrome Sum 題解: 在題目中a[i]和a[n-i+1]的和總共會有n/2個,;判斷這n/2個數 變成其他數字需要修改幾次,然後利用差分在這一段區間同時加上某個數。到最後再還原一下數組