農夫約翰的農場由 n 塊田地組成,每塊地里都有一定數量的牛,其數量不會少於1頭,也不會超過2000頭。
約翰希望用圍欄將一部分連續的田地圍起來,並使得圍起來的區域內每塊地包含的牛的數量的平均值達到最大。
圍起區域內至少需要包含 f 塊地,其中 f會在輸入中給出。
在給定條件下,計算圍起區域內每塊地包含的牛的數量的平均值可能的最大值是多少。
第一行輸入整數 n 和 f ,資料間用空格隔開。
接下來 n 行,每行輸出乙個整數,第i+1i+1行輸出的整數代表,第ii片區域內包含的牛的數目。
輸出乙個整數,表示圍起區域內每塊地包含的牛的數量的平均值可能的最大值乘以1000得到的數值。
1≤n≤100000
1≤f≤n
10 66 4
21038
5941
6500
#include#include#include#includeusing namespace std;
const int maxn=1e5+5;
int a[maxn];
double b[maxn];
int n,m;
bool check(double x)
return ans>0;
}int main()else
}printf("%d\n",int(l*1000));
return 0;
}
AcWing 102 最佳牛圍欄(二分答案)
題意 給乙個長度為n的序列,選取一段大於等於k的子串行,求可能子串行的最大平均值。思路 首先答案是可以二分的,每次二分去判斷是否有可行解。然後就是怎麼寫二分的check了,區間的平均數大於當前所要判斷的平均值等價於區間每個數減去平均值後區間和大於0,然後寫個雙指標,維護前序最小的字首。int n,l...
字首和 二分
powered by ab in 局外人 拿洛谷的乙個例子記一下字首和。資料超過了1e5,故o n 2 的演算法又行不通,所以換二分 include typedef long long ll using namespace std ll n,m,l,r ll a 1000001 sum 100000...
二分與字首和
時間複雜度o log n 資料區間 l mid r 實現 while l給定乙個按照公升序排列的長度為 n 的整數陣列,以及 q 個查詢。對於每個查詢,返回乙個元素 k 的起始位置和終止位置 位置從 0 開始計數 如果陣列中不存在該元素,則返回 1 1。輸入格式 第一行包含整數 n 和 q,表示陣列...