傻逼題spa
傻逼題code
傻逼題,先放2,1而後放完2而後放完1字符串
有三個字符串$s_1,s_2,s_3$和一個主串$s$,每次操做改變一個$s_i$(插入或刪除字符),每次操做完以後問$s$是否能夠分紅$3$個子序列正好是$s_1,s_2,s_3$。任意時候$|s_i|\leq 250$。get
設$nxt[x][i]$表示主串上字符$i$在$>x$上第一個出現的位置。it
設$f[x][y][z]$表示三個串分別匹配到$x,y,z$須要主串的最短長度。io
那麼這個能夠$O(1)$轉移,只要枚舉拼起來的最後一個字符就好了。test
插入最多改變$251^2$個$f$值,每次插入dp一遍多出來的$f$就好了。方法
https://codeforces.com/contest/1149/submission/53513066im
有一個合法的括號序列,每次交換兩個括號(保證仍是合法)求這個括號序列對應的樹的直徑co
Orz zsy碾標算
直徑至關於選一段,匹配完括號之後剩下最多的括號數
而後(由於zsy太強了)等於這一段分紅兩段後面的權值和-前面的權值和最大值,其中左括號權值爲1,右括號爲-1,證實顯然
因此在線段樹上維護一堆東西。。。就好了
要維護的:最大/最小前/後綴和,最大前/後綴的$d$值,序列總體$d$值,權值和,答案
一段的$d$值就是將這一段分紅兩段後-前權值最大值
https://codeforces.com/problemset/submission/1149/53591504
我是sb。。考場上讀錯題了。。。
有一張圖只包含邊權爲$a,b(a<b)$的邊。對於每一個點$p$求一個最小生成樹知足$1$到$p$距離最小。
顯然最小生成樹會先取完$a$,那麼先預處理出$a$邊組成的聯通塊。$1$到$p$的最短路邊權爲$b$的邊必定鏈接兩個不一樣的聯通塊,並且都會走到一個以前沒走過的聯通塊。那麼能夠狀壓全部聯通塊,最短路的同時記一下走過哪些聯通塊了,走$b$邊時判一下新的聯通塊有沒有走過。點數是$O(2^nn)$級別的。
能夠發現若是一個聯通塊點數$\leq 3$,那麼在這個聯通塊先走$b$邊出去再走$b$邊回來是沒有意義的,由於這樣至少走$2b$,而這個聯通塊內部最長也就最多$2a$。因此不須要記這些聯通塊,點數降到$O(2^{n/4}n)$就能夠直接作了。
https://codeforces.com/contest/1149/submission/53592086
有一張有向無環圖,每一個點有權值。雙方輪流操做,每次操做下降一個點的權值而後任意修改這個點全部後繼的權值。不能操做者輸。判斷先手勝負,若是先手勝輸出第一步走的一個可行方案。
先擺結論:$SG(x)=\mathbb{mex}{x\rightarrow i}SG(i)$,$sum(x)=\oplus{SG(i)=x}h_i$。若是有一個$sum(x)\neq 0$,先手必勝;不然必敗。
若是全部$sum$爲$0$,先手操做了點$i$,那麼操做後必定有$sum(SG(i))>0$。後手就再次操做使得$sum(i)=0$。操做方法就是找到最大的$i$知足$sum(i)>0$,而後能夠將全部$sum$修改成$0$。