csp-s模擬測試54 - 55

兩天炸掉了135分算法

csp-s模擬測試54

指望得分:100+72+45函數

實際得分:100+21+31測試

 

T2有重邊,關於鄰接矩陣,它死了TAT,掛了記憶化搜索-39。  而後判c=0想到了1點沒度,然而我判的mp[1][x]==1,-12優化

T3單調點,可增可減,然而我只判了增,掛了。ui

 

說出題人毒瘤,不如說本身太naive。spa

 

A. x

有相同質因子的必定不能分開,隊列

質因數分解,並查集維護。it

 

B. y

2^20讓任何算法的複雜度沒法招架class

meet in the middle思想搜索

分紅兩部分,而後把狀態接起來看是否可行,指數除以2。

mp0/1[i][j]鄰接矩陣,[j]放bitset,緣由在後面。

設f[i][s][j]表示以i爲起點,路徑狀態s,j爲終點的路徑是否存在。[j]一維放bitset裏

固定一個i爲起點,枚舉狀態s,枚舉終點j,而後若是合法轉移點用mp0[j]填裝f[i][s<<1],1同理,這樣複雜度/32

設bitset<>g[s][i]表示狀態s在i開始,0/1表示不存在或存在。

而後2^20枚舉,合併,bitset直接&看是否可行。

記得在高位放1,區分010和0010

 

 

C. z

$x_{i-1}<x_i<x_{i+1} or x_{i-1}>x_i>x_{i+1}$能夠合併,這樣能夠將位移轉化爲左右橫跳。

任意間隔>l,那麼不能一次完成多個任務

化下式子發如今這種狀況下答案是一次函數,能夠O(1)

用鏈表維護位移,優先隊列維護最小間隔。

 

以上是口胡,尚未改過。

 

 

csp-s模擬測試55

指望得分:100+50+20

實際得分:45+35+20

 

T1快讀沒開long long掛成暴力分qwq

T2考試結束前10分鐘發現部分分打炸(都不喜歡但廉價也能夠將就,霧),而後沒改完死了。

T3暴力打的很虛,稍優化還好

 

A. 聯

一眼線段樹

看到1e18值域,想了下序列,發現信息必須分段維護。因而肯定線段樹。

那只有離散化了,發現答案只可能在1,全部操做的l、r、r+1,把它們加到lsh[]裏,這樣就能在線段樹上保留它們的信息。

支持區間覆蓋,區間異或,區間最前0。

發現異或會將最前0和最前1交換,那麼維護f0[],f1[]表示區間[l,r]中最靠前的0/1

懶標記lz01[],lzxr[],維護對子區間的覆蓋,異或

注意:

區間異或 若是有lz01[]那麼把本區間的lz01[]取反,若是沒有把本區間的lzxr[]取反

保證覆蓋在前,xor在後的正確性

下下傳覆蓋標記要將子區間的lzxr[]清掉。

保證xor在前,覆蓋在後的正確性

down的時候先傳覆蓋,由於因爲以上操做兩個懶標記同時存在 必定是先覆蓋再xor的操做

 

 

B. 賽

部分分的啓示:當兩我的喜歡的物品集合不存在交集,那麼必定貪心選最小的裝滿k,而後再選剩下的最小的。

通常狀況,若是有交集,那麼優先考慮,由於加入一個會減小兩個,剩下的選擇多了,但交集部分的權值致使不單調。

因而咱們枚舉交集大小設爲r,必定會貪心地從小選。

只被一我的喜歡的部分都貪心選k-r個。

再線段樹維護下「剩下的物品」,支持insert,delete,前k小值和。查詢下m-p1-p2-i填滿m

每次增大r,把選的在線段樹中刪掉,只被一我的喜歡的物品,可知是彈出最大的,加到線段樹裏。

最後必定要注意特判、邊界。

 

C. 題

神仙題:

對每一個點單獨考慮。

逆推出若是我要讓這個點存活那麼要犧牲的點的集合。

答案就是能逆推回去而且犧牲集合沒有交集的點對數。

相關文章
相關標籤/搜索