gym101620_by_santongding

  • 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章