2016 Multi-University Training Contest 10 solutions BY BUPT


1001.

一個數組上的兩個區間求中位數,可以通過分類討論直接找到中位數,復雜度O(1).不過本題數據較小,優美的log(n)也可過.

1002.

直接求得陰影面積表達式即可.

1003.

二分完成時間判是否可行.不妨設A的deadline比B的deadline短,對於一次判斷內,由於總時間固定,兩類任務完成的總時間固定,則可用來練習的時間也固定,首先找到可完成的收益最大的A類任務,若找不到則在B里找,此時若B類的收益還不如去練習,而且練習時間有剩余的話,就先去練習.A類任務若能做則不需要考慮收益,因為要優先保證A的deadline,先練后練對最優解無影響.

1004.

對於第i個數,如果i mod k == 0, 說明它是第一輪出隊的,若i mod k != 0,那么i在一輪之后等同於一開始i-i/k的狀態,則一遍地推可求得所有數是第幾輪第幾個出隊的,預處理出出隊序列O(1)回答查詢即可.

1005.

為了使得花費最小,對於一段路來說,它的打開時間就是最早一次被用到到最后一次被用到這段時間.對於每一個操作a,b,在兩個點上打上標記,從左至右做一遍掃描,可知道每段路當前有哪些操作會用到它,取出最大值和最小值,在這兩個位置打上標記,最后對結果再進行一次掃描即可.

1006.

由於數據限制,只有豎向與橫向的線段才會產生交點,所以先對橫向線段按x端點排序,每次加入一個線段,將其對應的y坐標位置+1,當出現一個豎向線段時,查詢它的兩個y端點之間的和即為交點個數.

1007.

用dp[i][j][d]表示構建好i個字符后,最后面的最長公共長度為j,d表示之前答沒達到過m,后一狀態有j+1,0兩種,O(1)遞推即可.由於n很大m很小,可以用矩陣快速冪處理.復雜度O(m^3logn)

1008.

直接搜索的狀態空間有24(旋轉) \(\times\) 2(鏡面)\(\times\) 6!(顏色),乘上O(24)的驗證,單組數據復雜度到了O(1e6),經過一些很麻煩的優化后能降到O(1e3)左右,差不多能AC.
標解是hash,根據每種顏色的四個位置,求出C(4,2)個距離,共6\(\times\)C(n,2)個距離,排序之后能排除顏色交換的干擾,若兩個狀態的hash值,判定為同構,否則不同構.用標程和暴搜對拍了5e6組單組數據,沒有diff.驗證了可行性.

1009.

必勝條件是所有的石子的sg數模三異或為0,如7,11,13,14為0111,1011,1101,1110
然后可以枚舉一個石子的后繼然后再再其他石子的后繼看是否可行.
復雜度是預處理每個石子走了后繼以后的變化O(m)並將其記錄,可用map或者hash 然后枚舉一個石子的后繼然后再在其他的變化中查找能讓它變0的方法數,復雜度是O(M$\times $M),如果用map再多一個log(m).

1010.

考慮到操作數M較小而樹較大,所以可以對操作數進行計算。
假設初始時樹上的節點的最大值為x,則在操作完成后的樹上的節點的最大值不超過x+M,不低於x,所以可以枚舉最終狀態的值再計算概率。
設dp[i][k]表示操作i所作用的那棵子樹v在操作完成后最大值不超過x+k的概率,maxtree(v) 為該子樹初始時的最大值
那么可得遞推式
dp[i][k]=p[i] \(\times\) π(dp[j][k-1])+(1-p[i]) \(\times\) π(dp[j][k-1]) j為i的同一棵子樹上的后繼操作( maxtree(v)<=maxtree(root)+k);
or dp[i][k]=0;(maxtree(v)>maxtree(root)+k);
注意到子樹的最大值會比maxtree(root)小很多,因此k可能為負, 所以要加上偏移量M
為了便於計算,添加作用於根節點的概率為0的操作(root,0)
然后預處理出每個操作u的后繼操作即可。
先給每一個樹標記上dfs的入序indfn[v]和出序outdfn[v],那么作用在v節點上的操作的影響區間就是[indfn[v],outdfn[v]], 所以計算出區間之間的包含關系即可
最后結果為Σ(maxtree(root)+k) \(\times\) (dp[0][k+MAX_M]-dp[0][k-1+MAX_M]);
總復雜度O(M \(\times\) M+N);

1011.

直接模擬即可.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM