[題解] UVa 11368 - Nested Dolls
Tags
- 題解
- UVa
- B難度
題解
由大套小的特性來看,決定先排序;
如果能使排序後,索引大的可以只考慮套索引小的,會使問題單純很多。
於是依第一維小到大排序,
這樣我們就可以只考慮第二維的數字;
但我們必須避免第一維相同大小的娃娃互套。
於是第一維相同時,我們依第二維大到小排序。
這樣低索引中第一維相同大小的,第二維一定不會比自己小,一定套不了,
就可以迴避第一維相同大小的娃娃互套的問題,把題目壓成一維。
接下來我們觀察發現,每個娃娃盡量找大的套一定不會比較糟;
因為小的選擇比較多,能套大的一定能套小的,反之則未必。
對於每個娃娃,都去看目前沒被套的娃娃中,最接近自己但又比自己小的套上。
如果都套不上,就擺上目前沒被套的娃娃列中。
觀察會發現目前沒被套的娃娃,依這邏輯每次覆蓋都會讓娃娃大小增加;
覆蓋不了則會被放到最後端變成新的沒被套的娃娃,
則娃娃會維持大小不遞減的關係,因此我們可以對沒被套的娃娃們二分搜尋比自己小的中,最大的那一隻。
排序的複雜度 n log n,
每隻娃娃找到能套的最大娃娃,總共也是 n log n
Time: 0.040, Rank: 94/447
來自小希的提醒
- 無
cmusu