題目還是看原題吧。
這道題簡直魔性、先膜一下大佬wjj(orz)
我們令s=a* h+b* v。
原式就是s <= a* minh + b * minv + c
我們預處理出所有s。我們把資料複製兩份,x陣列按s從小到大排序,y陣列按h從小到大排序。
我們隨便列舉minv,我們在算出乙個maxv=minv+c/b(有什麼用一會解釋),然後在內層我們再在y陣列中從小到大列舉minh,這樣我們就發現在內層中原式右邊的一坨是單調遞增的,這樣我們就有了單調性,看似可以搞搞了。然後我們用乙個r指標指向x陣列首,乙個l指標指向y陣列首。因為單調我們一直讓r指標增加直到不滿足等式,我們把所有v大於等於minv的並且小於等於maxv(為什麼一會解釋)的讓cnt++,但是這樣會有乙個問題,因為可能把h小於minh的算進去,所以我們在y陣列上把那些小於minh的被多計算了的減去。
那麼問題來了maxv有什麼用呢?
我們把原式再看一遍:a * h + b * v < = a * minh + b * minv + c
我們把所有帶h的都去掉:b * v < = b * minv + c
兩邊除以b : v <= minv+c/b 這便是maxv的由來。
它有什麼意義呢?如果乙個球員 v 小於等於maxv並且h <= minh那麼它必然會滿足上面那個等式(雖然這是不合法的,但我們在第一次計算中會把它也算進去)
其次如果 v > maxv 那麼必然h < minh 這意味這什麼如果v > maxv那麼它必然非法。
所以maxv有乙個作用便是在減去非法情況的時候,都是那些一定會被計算且非法的情況。
我們在仔細想想:如果乙個球員的v很大,但h很小會有什麼效果,
那就是它的s會很大,但h會很小,也就是說他會在比較後面被列舉,maxv另乙個作用就是防止這種情況,讓l指標掃到後面去,前面卻照顧不到。(可以想一下沒有maxv會怎樣與前面那個作用連起來想一想)
bzoj1071 雙指標 組隊
description nba每年都有球員選秀環節。通常用速度和身高兩項資料來衡量乙個籃球運動員的基本素質。假如一支球隊裡 速度最慢的球員速度為minv,身高最矮的球員高度為minh,那麼這支球隊的所有隊員都應該滿足 a height minh b speed minv c 其中a和b,c為給定的經...
BZOJ1071 SCOI2007 壓縮 其他
zhouzhendong 有兩個序列a 1.n b 1.n 其編號為1.n,設為s序列。現在我們要求出最長的滿足條件的s的子串行s 設va min a s i vb min b s i 滿足對於所有的j s i a a j va b b j vb c。設v i a a i b b i 那麼,要求滿足...
1071 小賭怡情
1.解題思路 ans表示n1和n2真實的結果,如果n1 n2,ans為0 表示應該賭小,否則ans 1,表示玩家應該賭大。t表示當前玩家有的籌碼數,如果t 0,表示玩家已經輸光 輸出game over 如果t t,表示玩家下注超過持有的籌碼量 輸出not enough tokens.total 當前...