A 自閉的序列

2022-02-24 22:55:37 字數 2530 閱讀 2434

給乙個長度為\(n\)的非負整數序列\(a\)。

求乙個a的長度在\(l,r\)之間的連續子串行,並且他們所有元素的平均值最大。

你只要輸出這個最大值就可以了。

第一行包含三個整數\(n,l,r\)。

接下來一行\(n\)個數,表示序列a。

包括一行乙個實數表示答案,保留四位小數。

樣例一input

3 2 3

6 2 8

output
5.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這個作業系統模擬軟體,好像主要的原理就是通過乙個類似於軟盤的空間,...