牛客5531C 牛牛的揠苗助長 二分 中位數

2021-10-05 21:51:38 字數 1359 閱讀 5534

牛牛有一塊長度大小為n的菜園,他首先對這塊菜園從1到n進行了編號,每一塊地分別為1號、2號…n號菜地,然後他往每塊菜地中都種下了一些水稻,一開始,第i塊菜地中的水稻高度均為a[i]個單位。然後我們知道水稻的生長週期都是n天,也就是說每逢n天水稻就會長高乙個單位。但是不巧的是整個菜園中每一塊菜地的生長週期都錯開了,具體來說,第1天的時候第1塊菜地中的水稻長高乙個單位,第2天的時候第2塊菜地中的水稻長高乙個單位…第n天的時候第n塊菜地中的水稻長高乙個單位,接下來第n+1天,又輪到第1塊菜地中的水稻長高乙個單位以此類推。

每天在水稻進行自然生長之後,牛牛可以施展他神奇的魔法,這個魔法可以讓任意一塊菜地中的水稻長高乙個單位,或者讓任意一塊菜地中的水稻縮短乙個單位,當然啦,他也可以不進行任何操作。

牛牛看到菜園中的水稻參差不齊十分難受,請問至少在第幾天,他能夠讓所有的水稻都長到同乙個高度?

第一行是乙個正整數n(1≤n≤105 ),表示有菜園有n塊菜地。

接下來一行輸入n個正整數,表示每塊菜地上水稻的高度,水稻的高度1≤a[i]≤109 。

保證一開始輸入時水稻的高度不全都相同(資料保證答案至少為1)。

輸出乙個正整數表示問題的答案。

3

1 2 3

1
在long long範圍內二分答案x。

對於x,令y=x%n。因為自動生長,前y塊地的高度+1。(倍數部分都+1,相當於不變)

現在還需要考慮x次的魔法。要讓使用的魔法次數盡可能的少,就要讓所有水稻的高度向中位數靠近。遍歷模擬靠近的過程,累計使用魔法的次數,如果次數<=x,則x滿足條件。

複雜度:二分logn*(查詢中位數n*logn+遍歷模擬n)=(logn)2*n

#include

#include

#include

#include

using namespace std;

typedef

long

long ll;

const

int n=

1e5+20;

ll n,a[n]

,b[n]

;//原資料存在b陣列中,a陣列用於排序

bool pd

(ll x)

if(z>x)

return0;

else

return1;

}ll fun()

//二分答案

else

l=mid+1;

}return ans;

}int

main()

牛客練習賽63 牛牛的揠苗助長 二分)

題目傳送門 牛牛有一塊長度大小為n的菜園,他首先對這塊菜園從1到n進行了編號,每一塊地分別為1號 2號 n號菜地,然後他往每塊菜地中都種下了一些水稻,一開始,第i塊菜地中的水稻高度均為a i 個單位。然後我們知道水稻的生長週期都是n天,也就是說每逢n天水稻就會長高乙個單位。但是不巧的是整個菜園中每一...

牛客練習賽63 C牛牛的揠苗助長 二分

題目 假設有n天,每天,小麥會按照下標依次增長1個單位,第一天第乙個小麥長,第二天第二個小麥,第n 1天第乙個小麥長。牛牛可以在每天操作,使得任意小麥長1單位或減1單位,求最小的n,使得所有小麥都相同長度 首先想到二分,對天數進行二分,然後已知t天,開始對小麥操作 對於cnt t n天,是對前cnt...

牛牛的揠苗助長(將所有植物對其的最小操作,二分)

題目 牛牛的揠苗助長 牛客 題目描述 感覺這樣直接貼上不太好 有一塊長度為n 1 n 105 的菜地,每塊菜地菜的高度為a i i 1,n,1 a i 109 菜的生長有乙個週期,恰好為n,且第i天a i n 菜地長高1。現有魔法每天可使用一次 使某一塊菜地長高或長矮1,或者不變也行。問最少多少天能...