t1:
約瑟夫問題。
經證(da)明(biao)可知,最終答案計算方法是:
答案由$1$開始,每次加$m$,若大於次數加一,就對次數加一取模。
可以$o(1)$計算每次取模的位置,取模不超過$mlogn$次,於是時間複雜度為$o(mlogn)$。
t2:普及:向量叉積:$v_1=(x_1,y_1),v_2=(x_2,y_2) \rightarrow \vec\times \vec=|x_1*y_2-x_2*y_1|$
然而我只會拆平方幹推式子:
$\large \begin ans &=& \sum \limits_^r \sum \limits_^r (v_i \times v_j)^2 \\ &=& \sum \limits_^r \sum \limits_^r (x_iy_j-x_jy_i)^2 \end$
考慮拆平方:
$\large \begin ans &=& \sum \limits_^ \sum \limits_^r (x_i^2y_j^2+x_j^2y_i^2-2x_iy_ix_jy_j) \\ &=& \sum \limits_^r \sum \limits_^r x_i^2y_j^2 + \sum \limits_^r \sum \limits_^r x_j^2y_i^2 - \sum \limits_^r \sum \limits_^r 2x_iy_ix_jy_j \\ &=& \sum \limits_^r \sum \limits_^r [i!=j]*x_i^2y_j^2 - \sum \limits_^r \sum \limits_^r [i!=j]*x_iy_ix_jy_j \\ &=& \sum \limits_^r x_i^2 (\sum \limits_^r y_j^2 -y_i^2) - (\sum \limits_^r x_iy_i (\sum \limits_^r x_jy_j - x_iy_i)) \\ &=& \sum \limits_^r x_i^2 \sum \limits_^r y_j^2 - \sum \limits_^r x_i^2y_i^2 - (\sum \limits_^r x_iy_i \sum \limits_^r x_jy_j - \sum \limits_^r x_i^2 y_i^2) \\ &=& \sum \limits_^r x_i^2* \sum \limits_^ry_i^2 - (\sum \limits_^r x_iy_i)^2\end$
線段樹中維護$\sum \limits_^r x_i^2$,$\sum \limits_^r y_i^2$和$\sum \limits_^r x_iy_i$即可。
時間複雜度$o((n+m)logn)$。
t3:經典的lcis(最長公共上公升子串行)問題。
設$dp[i][j]$為第乙個串考慮到第$i$位,第二個串選擇第$j$位的最優答案。
則有狀態轉移方程:
$dp[i][j]=\max \limits_{k
我們發現第二維只能從小向大轉移,所以從小到大列舉,同時更新當前最優答案,直接更新即可。
至於方案,記錄轉移前驅即可。
時間複雜度$o(nm)$。
csp s模擬測試60
又頹又垃圾。狀態低迷,題都交不上去。交了也是爆零,垃圾玩家沒有什麼可說的,就是垃圾。mlogn 的毒瘤做法。貼乙個不一樣的毒瘤做法。1 ans ans m i 2 include 3 include 4 include 5 include 6 define re register 7 define ...
省選模擬60 題解
考慮乙個暴力做法。維護乙個堆,每次取出深度最大的點,如果他還沒有覆蓋,那麼就給答案增加 1 否則直接跳過,然後直接跳到他的 k 級祖先加入堆中,複雜度是 o n 2log 的。然後發現這樣乙個事情,這個複雜度肯定是不滿的。比如說對於單次操作,複雜度大概就是答案大小 log 級別的。考場上大概想到了這...
考試反思 1005csp s模擬測試60 招魂
最近總是好一場爛一場的。沒有連續兩場排名波動小於20的。沒人管。反正大臉一點臉沒有就又ak了。但是t3爆零這種事情吧。爆搜不是很難打,但是想優化想了半天剩的時間不夠結果趕忙打出來了,然後就掛了。合理安排時間,要把碼暴力的時間也考慮到,要檢查。t1t2仍然掛上了對拍,所以沒有全盤 總體來說是相對簡單的...