-
A
題意:
題解:
模擬
代碼:A -
B
題意:
在平面第一象限中原有n個a點,同時按順序出現m個b點,每出現一個b點以其位置爲中心,向x,y軸垂直畫射線,若射線碰到之前其他b點畫的線則停止.問每個b點出現時其畫的射線與座標軸、其他b點畫出的射線圍成的閉區域中有多少個a點.
b點所有x座標互不相同,所有y座標互不相同.
題解:
考慮離線做法,先求出所有b點都畫完之後每個b點所屬區域中有多少個a點,然後按出現順序逆序刪除b點及其所屬線段,其所屬的點就累加到其他b點所屬的區域中.
用類似掃描線算法實現,先對所有a,b點y座標從大到小排序,以此將點加入,同時維護一個按x座標升序排序的b點集合,其中所有點垂直的射線都沒有被其他b點的水平射線擋住.
對於每一個給定的y座標,由於只有可能出現一個b點,先對b點操作再對a點操作.
考慮:
(1)如何將b點加入集合並維護集合正確性
(2)找出如果將b點刪除後,其中的答案應累加給誰.
(3)找出a點在最終圖中所屬的b點
對於(1),直接將當前b點加入集合,在集合中直接查找x座標,然後將x座標小於當前點且在原題目中出現時間晚於當前點的點刪除,由於點只能被刪除一次,這部分複雜度logn;
對於(2),找到集合中當前b點在集合中的下一個點,即爲所求.無需比較在原題目中出現時間的先後順序(使用並查集合並正確性顯然).
對於(3),找到在b集合中x座標大於等於這一a點的第一個點即可.
統計答案時,按原題目中出現順序從後往前操作,先記下在並查集中當前點的累加答案,再將這個點答案與之前(2)步驟中找出的點用並查集合並在一起.
代碼:B
-
G
題意:
有一個n點m邊的雙向圖(n,m<=3e5),初始時一個人在1點,他每次能花費1代價獲得一次轉移機會,這次機會可以讓他等概率走到當前點的相鄰點,同時他可以選擇不移動(但依然花費代價),求到n點的最小期望值.
題解:
設f(x)爲點x到n的最小期望,初始時只知道f(n)=0.
考慮從小到大將所有f(x)求出來.
現在假設已知前k小的f(x).
對於第k+1小的點,他在花費1代價後,如果隨機到前k小的點,則向前走,否則就停留原地.
設cnt(x)爲x的相鄰點中已知f(x)的個數,d(x)爲x的度數.
那麼對於第k+1個點,肯定滿足
f(x)=Σf(i)/d(x)(f(i)已知)+f(x)*(d(x)-cnt(x))/d(x)+1
整理得顯含f(x)的表達式.
根據這個表達式求得的最小值的那個點即爲第k+1個點.
運用類似dijstra做法即可
代碼:G -
L
題意:
2000x2000網格平面中有a,b兩種正方形,a邊與網格線水平,b邊與網格線呈45°夾角,兩種正方形中心都在格點上,且a的邊長爲偶數,b的對角線長爲偶數,求所有正方形面積並.
題解:
考慮將a,b兩種正方形分開處理.
對於a,用二維前綴和計算每個格點是否被覆蓋即可.
對於b,作出一個與所有b邊平行的新網格圖,用處理a一樣的方法進行處理,同時計算新圖到原圖中的映射.
統計答案時遍歷新圖中每一個點,同時找出在原圖中的對應區域是否被覆蓋,運用簡單容斥即可.
注意細節及邊界情況
代碼:L