[CF]Round514
A Cashier
題意:一個人,一天的工作時長為\(L\),從第\(t_i\)時刻開始有長度為\(l_i\)的工作,他想在工作間隙抽煙,抽一根要\(a\)分鐘,問能抽幾根。
直接模擬。
B Forgery
題意:給定一個由#和.構成的矩陣,問能否用一個3*3但是中間是空的由#構成的“畫筆”可以重疊的畫出這個圖形。
其實也是模擬,就是把給定的圖中能涂的筆畫全都涂上,然后比較生成的圖和給定的圖有何不同就行了。
C Sequence Transformation
題意:給定一個\(1..n\)的序列,定義變換為:將該序列中的所有數的\(\gcd\)放入答案序列中,然后刪除一個數。求字典序最大的答案序列。
由于要字典序最大,所以要盡可能早的構造出一個非\(1\)的\(\gcd\),可以想到,最好構造的(刪除的數最少的)\(\gcd\)就是\(2\)(只用刪除一半的數),然后就出現了一個規模更小的形式相同的問題:構造\(2,4,6,8,..\)的最大的答案序列。遞歸進行這個步驟就行了。注意只剩\(3\)個元素的時候,樣例給出了更好的解決方案(1,1,3)。
D Nature Reserve
題意:給定一些平面上的點,問能否用一個與\(x\)軸相切的圓把它們包起來,如果能,輸出最小的半徑。
容易發現,如果這些點的縱坐標有正有負或有多個在\(y\)軸上,那就不可能有一個滿足條件的圓。設圓心為\((x, y)\),容易發現半徑就是\(y\),那么有\((x-x_i)^2 + (y-y_i)^2 \le y^2\),化簡可得:\(x_i - \sqrt{y_i*(2y-y_i)} \le x \le x_i + \sqrt{y_i*(2y-y_i)}\),由于兩側的界是單調的,所以可以二分\(y\),看是否有滿足條件的\(x\)。
注意二分的上界是很高的,對于這樣一組點\((10^7, 10^7), (-10^7, 10^7), (10^7, 1), (-10^7, 1)\),半徑的長度高達\(5\cdot 10^{13}\)的級別。所以二分上界要盡可能的高一些。這樣的復雜度是\(O(n\log C)\),其中\(C\)是二分上界。
這個題還有許多其他做法,比如在二分\(y\)之后,看以每個點為圓心,\(y\)為半徑的的圓和直線\(y = y\)的交點判斷是否有解。據說還有\(O(n \log n)\)的做法。
E Split the Tree
題意:給定一棵有根樹,點有點權,問最少能用幾根點數不超過\(L\)的,總點權不超過\(S\)的,直上直下的鏈不相交地覆蓋這個樹。
可以DP也可以貪心。首先預處理出每個點向上能走多遠(倍增),然后對于某個點,我們可以貪心的選擇兒子中的能跑的更遠的點來擴展到這個點。
轉載于:https://www.cnblogs.com/wyxwyx/p/cfr514.html
總結
以上是生活随笔為你收集整理的[CF]Round514的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 部门招新宣传标语文案30句
- 下一篇: Maven_在Eclipse中执行Mav