給乙個長度為\(n\)的非負整數序列\(a\)。
求乙個a的長度在\(l,r\)之間的連續子串行,並且他們所有元素的平均值最大。
你只要輸出這個最大值就可以了。
第一行包含三個整數\(n,l,r\)。
接下來一行\(n\)個數,表示序列a。
包括一行乙個實數表示答案,保留四位小數。
樣例一input
3 2 3
6 2 8
output5.3333
對於\(20\%\) 的資料,滿足 \(1 \le n \le 200\)。
對於\(40\%\) 的資料,滿足 \(1 \le n \le 2 000\)。
對於\(100\%\) 的資料 ,滿足 \(1 \le n \le 20000,0\le a_i\le 10^9,1\le l\le r\le n\) 。
時間限制:1s
空間限制:128mb
題意理解
找一段區間,要求區間長度\(len\in[l,r]\),找到乙個區間,使得它的平均值最大。
\(40pts\)思路
我們可以想到,首先\(o(n)\)列舉區間長度\(len\),然後我們可以,在用\(o(n)\)的時間遍歷區間的左端點\(l\),此時區間就是\([l,l+len-1]\)。
然後統計這個區間的平均值,在這裡的,我們可以提前預處理出
\[sum[i]=\sum\limits_ ^ n a_i
\]那麼在這裡
\[[l,r]平均值=\frac
\]如果你思路類似於下面這段**,直接列舉左端點和右端點,你的得分將是\(90pts\),。
因為資料太水了
**如下
#include using namespace std;
const int n=2e4+10;
int n,l,r,a[n],sum[n];
inline void init()
printf("%.4lf\n",ans);
}signed main()
\(100pts\)思路
當我們看到這道題目,答案是個小數的時候,應該不難想到二分演算法。
而本題之所以可以使用二分演算法,是因為題目答案具有單調性質。
我們可以二分答案,判斷是否存在乙個平均值\(\ge y\)的區間,這樣就可以找到最終答案。
因為,如果說答案是\(x\),那麼顯然 \(\forall y \le x\),都可以滿足,因為最終答案的區間,他們平均值一定滿足\(\ge y\)
那麼我們接下來需要討論,如何在\(o(n)\)的時間,判斷是否有區間合法。
\[設len表示區間的長度 \\\\
len(a,b)表示區間[a,b]長度
\]現在要求我們,找到乙個\(l \le len \le r\)的區間,滿足他的平均值要大於\(y\)
此時我們可以使用單調佇列滿足本題。
我們知道單調佇列擁有兩大性質
佇列中的元素具有順序
佇列中元素具有某種單調性質
如果說現在有兩個區間。\([a,i],[b,i]\)
此時滿足\(sum[a,i] \le sum[b,i] 而且 a \le b\)
那麼此時,我們應該選擇\([b,i]\)區間,而不是\([a,i]\)區間。
因為\(len(b,i) \le len(a,i) \quad \& \quad sum[b,i] \ge sum[a,i]\)
那麼此時,我們需要將單調佇列的細節進行處理。
隊頭表示什麼?
滿足區間長度限制,而且在佇列中,\(sum[head,i]\)最大
隊尾表示什麼?
滿足區間長度限制,在佇列中區間長度最短。
從**進入佇列?
從隊尾,因為此時元素和當前節點構成的區間最短。
如何將乙個元素從佇列退出?
隊頭元素,不滿足區間長度限制,則刪除。
隊尾元素,面對新來的節點,不滿足上面所述的單調性質,則刪除。
從上所述,這就是我們的單調佇列的處理。
#include using namespace std;
#define eps 1e-6
#define sum(a,b) (sum[(b)]-sum[(a)-1])//計算區間[a,b]的和
const int n=2e4+20;
int n,l,r,q[n<<1];
double a[n],sum[n],l,r;
inline int check(double x)
return 0;
}inline void init()
printf("%.4lf\n",r);
}signed main()
C 自閉的遊戲
小s在玩乙個自閉的遊戲。有乙個骰子,這個骰子有 m 個面分別寫著 1 cdots m 並且投擲時每面朝上的概率相同。現在,小s投了這個骰子 n 次,並且告訴小t點數 v 至少出現了一次。小t需要猜測乙個正整數 sum 表示她猜測的這 n 次骰子的點數之和是多少。現在,他想要知道玩家的正確率有多少呢?...
題目 L 自閉
題目描述 世界上的大佬太多了,菜雞們紛紛自閉並來到心理診所尋求 心理診所的每乙個醫生有不同的開始上班時間,能力 a 和收費 c,能力為 a 的醫生可以治好自閉程度小於或等於 a 的菜雞。菜雞們都很窮,所以他們只想要能治好他們的最便宜的醫生,請你告訴他們當前能治好他們病的最便宜的醫生的 假設 在瞬間完...
2 最近開始自閉
昨天半夜在碼blog。然後舍友說我聲音太大了。所以間斷了一晚。以後我要是有錢,一定要買乙個big house,機械鍵盤,雙螢幕,我要天天噼里啪啦碼 昨天去作業系統上機實驗,慶幸自己後面比較專注,總算把實驗寫完了。了解了estimine這個作業系統模擬軟體,好像主要的原理就是通過乙個類似於軟盤的空間,...