當(dāng)前位置:
首頁 >
Arithmetic Sequence 三分,货仓选址,nth_element,__int128(济南)
發(fā)布時間:2025/3/19
51
豆豆
生活随笔
收集整理的這篇文章主要介紹了
Arithmetic Sequence 三分,货仓选址,nth_element,__int128(济南)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題意 :
- 給一序列,每次操作選擇一個數(shù)加一或者減一,需要將這個序列變成等差數(shù)列,問最小操作數(shù)
思路 :
- 數(shù)據(jù)范圍很大又沒有頭緒,想到二分或者三分。對于不同的公差d,肯定是只有一個最優(yōu),兩邊的都比這個公差大,這就是個單谷函數(shù)(代價隨公差的變化是一個單谷函數(shù)),我們可以用三分來求這個公差。
- 但有了公差還無法確定首項(xiàng),再套一個三分會TLE
- 設(shè)首項(xiàng)為x,公差為d,那么變化第一項(xiàng)的次數(shù)為∣x?a[1]∣|x-a[1]|∣x?a[1]∣,第二項(xiàng)為∣x+d?a[2]∣|x+d-a[2]|∣x+d?a[2]∣,|x+d*2-a[3]|,…,設(shè)t[i]=a[i]?d?(i?1)t[i]=a[i] - d*(i-1)t[i]=a[i]?d?(i?1),每一項(xiàng)的變化就會轉(zhuǎn)化為∣x?t[i]∣|x-t[i]|∣x?t[i]∣(每一項(xiàng)的這個距離都共享同一個端點(diǎn)x,注意為什么是把它轉(zhuǎn)換成了絕對值里面的減法而不是轉(zhuǎn)換成絕對值里的加法,畢竟距離肯定有更好的性質(zhì)),就轉(zhuǎn)化成了貨倉選址問題,因此,找到中位點(diǎn)即可
- 需要用nth_element找中位點(diǎn),sort復(fù)雜度會超(由于三分的時間復(fù)雜度要高于二分,因此求中位數(shù)禁止使用sort,請使用快速選擇算法或者部分快速排序,下面的代碼使用了北京大學(xué)提供的題解上使用的nth_element函數(shù)求解)
- 可能會超long long,需要開128(由于數(shù)據(jù)范圍過大(1e13*2e5),在運(yùn)算過程中可能會爆long long,請使用128位整數(shù)__int128)
總結(jié)
以上是生活随笔為你收集整理的Arithmetic Sequence 三分,货仓选址,nth_element,__int128(济南)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Optimal Strategy 组合数
- 下一篇: Consecutive Sum Ridd