hdu 4923 Room and Moor (单调栈+思维)
生活随笔
收集整理的這篇文章主要介紹了
hdu 4923 Room and Moor (单调栈+思维)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:
給一個0和1組成的序列a,要構造一個相同長度的序列b。b要滿足非嚴格單調,且
值為0到1的實數。最后使得 ?sum((ai-bi)^2)最小。
算法:
首先a序列開始的連續0和末尾的連續1是能夠不考慮的。
由于僅僅要b序列相應開頭為0、
末尾為1,既不影響單調性又能使相應的(ai-bi)^2=0。
然后,
先找111100、11100、10這樣以1開始以0結束的序列塊。每一塊相應的b值相等且均為
這一塊的平均值,即1的個數/0和1的總個數。
可是要滿足b的單調性,則我們用棧來維護,假設后面一塊的均值<前面一塊的均值,則
合并這兩塊。也就是僅僅要棧頂的塊的均值小于要壓入棧的塊的均值,就一直合并,直到
滿足單調性。再把當前的值壓入棧。
最后僅僅要一塊塊統計相應的sum((ai-bi)^2)就是答案了。
逗逼記憶---->比賽的時候我沒有想到塊,僅僅想到除去前面的0和后面的1。中間的值都是一樣。
用二分或者三分解決,僅僅要控制精度=。
=
P.S: ? 這題必須注意細節,否則極易丟失精度。主要是我代碼凝視的兩個我開始沒有控制好的地方。
o(╯□╰)o
總結
以上是生活随笔為你收集整理的hdu 4923 Room and Moor (单调栈+思维)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 个人学习Linux决心书
- 下一篇: 事件绑定机制简单实现