這次答題思路等等各種方面比較順利,但是還是有一些不穩定因素,比如說不會拍的t2,然而他a了,如果沒a我就涼涼了。
大體過程就是,先看完題,寫45min的t2,過了三個樣例不會拍,於是過了,然後寫了t160分暴力,再寫了t360分三分暴力,在回頭看t1的100分,沒有思路,就寫了t3的100分,之後還有半個小時,寫了個n3t1暴力拍t1的60分n2暴力,最後拍了半個小時發現n3是錯了我靠。。。但是沒時間了,於是交了t1,拿了60,如果我。主要的失誤就是t1沒有寫好n3的暴力,寫好了的話,t1的正解其實挺水的,也許半個小時我就想出來了,這樣沒準就ak了。
題解:t1:其實挺水的不過我沒寫出來。。。大體來說就是找到一些左右端點交換之後可以成為固定點的區間,然後按照這些區間的旋轉中心來排序,挨個掃一下可以o1統計答案,這樣因為排序所以是nlogn的。
t2:每個點向周圍的空地連邊,長度為1。向上下左右正對著的牆連邊,長度為這個點到離他最近的牆的距離。跑spfa最短路即可。
t3:主要說一下t3,這道題話了我乙個小時45分鐘來寫,最終a掉了。
首先是$o(n^2h)$的演算法:列舉每乙個點,列舉$1->1e9$的每個高度,再$o(n)$計算貢獻,取最小值即可。
接下來是$o(n^2log_h)$的演算法:我們發現每個點關於高度的決策所產生的答案是單峰函式,因此可以三分極值從而得到答案。
然後是正解:可以發現決策點不具有單調性,所以每個都必須要列舉,而我們能做的只有快速計算決策答案。把check的$o(n)$優化成$o(logn)$。
首先寫一下式子,以左邊為例,右邊同理,設原來的高度為$a_j$,需求的高度為$h_j$.
$h_j-j=h_i-i$
$h_j=h_i-i+j$
$res=\sum \limits_^abs(h_j-a_j)$
$ =\sum \limits_^abs(h_i-i-(a_j-j)) $
我們發現$abs$裡的東西可以快速用樹狀陣列求和,但是套了絕對值之後,有正有負,無法快速計算,考慮排序每個點的$a_j-j$的值,離散到下標,維護左右兩顆樹狀陣列,維護下標所代表的點的字首和與點的個數。這樣我們在排序後的陣列中二分查詢到位置,然後在樹狀陣列中查詢,查詢到比他小和比他大的和與個數,這樣就可以$o(logn)$計算答案。
總複雜度$o(nlog_hlog_2n)$
可以解決本題。
關於某skyh的垃圾退火,在此不提。
其實這次離$ak$差的不遠,如果我能夠在最後半個小時不慫,直接剛正解,也許分數還會再高40分,可是我沒有,於是失掉了這個機會。
人不能老慫,需要勇氣的時候要確保他荷槍實彈整裝待發,永遠這樣保持自信並清醒的自信。
2019 8 7 考試反思
本來打算咕掉畢竟過了這麼久了要體諒一下我這老年人的破記憶力 可是還是要寫因為不寫就破壞隊形了qwq 題不錯,人有 zei 點 jier 爛。上來先看了三道題,對t2比較感興趣,不過t1看起來好做一點。t1很快就發現如果乙個非固定點想要做貢獻,那它的旋轉點是固定的。n 2 60分應該是穩了。碼完之後看...
2019 8 7訓練日誌
廣搜 廣度優先搜尋是逐層遍歷搜尋樹的演算法,所有狀態按照入隊的先後順序具有層次單調性。如果每一次擴充套件恰好對應一步,那麼當乙個狀態第一次被訪問 入隊 時,就得到了從起始狀態到達該狀態的最小步數。在廣搜中,我們還要注意剪枝,對之前到達過的點進行標記,由於之前到達過的點的步數一定比現在到達用的步數少,...
2019 8 7Qt執行緒理解
然後訊號和槽才能實現主線程和執行緒的切換比較方便,比如你在主線程裡直接呼叫放入執行緒裡的類的槽函式,他還是執行在了主線程。然後還有乙個自己理解的基本概念 qt訊號和槽執行緒操作,directconnection連線法是指 如果這個訊號是從執行緒函式裡發出來,槽函式強制執行在發出函式執行的執行緒,而和...