原创 Hdu 4416 Good Article Good sentence

給出一個的字符串A,|A|≤100,000 ,n 個字符串,分別爲Bi,∑i=1n|Bi|≤100,000 ,求A 中沒有在任何一個Bi 中出現的字串的個數。 對A 建立SAM ,將每一個Bi 都放在SAM 上運行,記錄SAM

原创 Hdu 5895 Mathematician QSC

f(0)=0,f(1)=1,f(n)=f(n−2)+2∗f(n−1)g(n)=∑i=0nf(i)2 , 求 xg(n∗y) mod (s+1) 首先有一個公式寫作xa(modP)=xa mod ϕ(P)+ϕ(P)(modP)

原创 Codeforces 344D - Alternating Current

桌上有兩根相互纏繞的電線,問能否在符合題目要求的移動下將這兩根電線解開 不難看出相鄰的兩個同色線結是可以消去的,那麼能否解開就等價於能否把線結消空。 這樣用一個棧模擬即可。 #include<bits/stdc++.h> usi

原创 Codeforces 347D - Lucky Common Subsequence

給出兩個長100 的字符串a ,b 。再額外給出一個長100 的字符串 virus 。詢問a 和b 最長的沒有字串是virus 的公共子序列。輸出這個子序列。 在經典的LCS 的dp 解法上再加一維,記錄當前的最長公共子序列匹配viru

原创 Bzoj 4184 shallot

如果只有插入的話,直接維護線性基就好了 但是現在有了刪除,我們按時間分治,將操作建立成一個線段樹。每一個數都有一個存活的區間,我們在線段樹上更新這個區間。然後dfs線段樹。線段樹上每個節點維護的是到當這個節點的線性基。然後就可以免去刪除操

原创 Codeforces 349E - Subset Sums

有n(n≤105) 個數,有m 個下標的集合(集合的大小之和小於105 ) 維護兩個操作 詢問操作:? k 將下標在第k個集合內數求和輸出 更新操作:+ k x 將下標在第k個集合內的數都+x 因爲集合的大小之和小於105

原创 Bzoj 2002 彈飛綿羊

學會LCT很久了,今天才會寫LCT 因爲我使用數組而不是指針來保存節點,乾脆利用起了根節點的fa這個空間來保存虛邊 具體的, 如果fa爲正數,則爲splay中的邊。 如果是0,沒有父節點。 如果是負數,取反之後表示虛邊所指向的父親。 具

原创 Codeforces 344E - Read Time

二分後貪心 #include<bits/stdc++.h> using namespace std; #define LL long long const int maxn = 112345; const LL INFF = 0x3f

原创 Bzoj 3875 騎士遊戲

DP的本質是DAG上的最短路。 但是如果不是DAG呢?那些常用的最短路算法,比如spfa或者是Dijkstra就可以了。 感覺打開了新世界的大門。 對於這個題來說,我們需要維護一個差分。具體的處理過程見代碼 #include<bits/

原创 Codeforces 350C - Bombs

將炸彈按照離原點點的曼哈頓距離排序之後順序處理即可。 #include<bits/stdc++.h> using namespace std; const int maxn = 112345; vector<pair<int,pair

原创 CodeForces 663E - Binary Table

給出一個n(n≤20) 行m(m≤105) 列的01 矩陣。每次操作可以將某一行取反或者將某一列取反。要求操作後的矩陣中的1 的個數最少,求最小個數。 因爲行比較少,我們考慮狀壓。 狀壓每一列的狀態,sta 第i 位爲1 表示第i 行爲

原创 Codeforces 347C - Alice and Bob

每一回合挑選集合中的兩個數x,y , 滿足|x−y| 不在集合中,然後把|x−y| 加到集合裏。給出集合最初的n 個數問是否先手必勝。 遊戲結束的時候最小的數就是這n 個數的gcd ,最大的數就是一開始給出的集合的最大的數。 遊戲結束的

原创 Codeforces 350D - Looking for Owls

給出一些圓和線段。 定義一個“貓頭鷹”是滿足以下四個條件的一個線段和兩個圓的集合。 兩個圓半徑相等 兩個圓沒有交點 兩個圓關於線段對稱 兩個圓圓心的連線和線段有交點 圓的個數≤1500 ,線段個數≤3×105 因爲圓比較少,考慮枚舉

原创 Hdu 5967 小R與手機

LCT模板題 如果某一次加邊會成環,我們可以保證這個點一定是某一個根,在根上記錄一下後繼 每一次切斷某條邊的之後同時查詢根的是否有後繼,後繼是否可以連接 具體見代碼 #include<bits/stdc++.h> using namesp

原创 Hdu 4804 Campus Design

有一個n×m(n≤100,m≤10) 的棋盤,除了一些不能被覆蓋的位置外其他的地方用1×2 和1×1 的骨牌填滿,1×1 的骨牌使用次數在[C,D] 之間。問滿足條件的方案數(mod109+7) 一個簡單的插頭dp入門題。 不能覆蓋的地