暑假集訓 Day5 T1 羊圈

2022-05-08 19:51:08 字數 1314 閱讀 9903

時間限制: 1 sec  記憶體限制: 512 mb

題目描述

zyc的農場有n(1<=n<=100,000)塊連續的區域排成一排,每塊區域上都有確定數量的羊(每塊區域不超過2000千隻)。 

現在zyc想要將一些區域用圍牆圍起來,作為資訊社的優秀成員,當然要給自己出點難題:他希望圍起來的區域裡羊的總數/區域數的值最大,並且保證圍起來的區域數不小於m。 

輸入第一行包括兩個整數,分別表示n和m 

以下n行每行乙個正整數,表示對應區域羊的數量(單位千隻) 

輸出輸出最大平均數(單位只) 

樣例輸入

10 66 4

21038

5941

樣例輸出

6500

看到這道題時,我的第乙個想法是打個字首和暴力求解。於是第乙份**就出爐了。

1 #include2

using

namespace

std;

3int

n,k;

4long

long a[100005],sum[100005

],ans;

5int

main()6

13for(int i=1;i<=k;i++) sum[1]+=a[i];

14for(int i=2;i<=n-k+1;i++)

1518

for(int i=1;i<=n-k+1;i++)

1926

}27 printf("

%lld

",ans);

28return0;

29 }

然而在看到了100,000的資料範圍後,我就知道這種做法會t,沒想到還拿了71分。資料太水了。於是我就想到了二分。其實根本就沒想到。

因為字首和具有單調性,所以我們只需要求出平均值,然後用原數列減去平均值,最後找出乙個非負子串行就可以了。(題解上好像是這麼說的)

1 #include2

using

namespace

std;

3int

n,m;

4double a[100005],b[100005],sum[100005];5

intmain()621

if(ans>0) l=mid;

22else r=mid;23}

24 printf("

%d",int(r*1000));//

按照題目要求輸出

25return0;

26 }

暑假提高組集訓Day1 T2

那麼這一道題我在考試的時候寫掛了 0分 嗚嗚 我原來的思路是廣搜來騙取部分分 哈哈 但是我忘記了乙個非常重要的問題 我廣搜開的陣列沒有考慮負的下標 下一次考試如果再寫暴力 就可以把座標都加上乙個數就行了 那麼這一道題 n 10 6 每乙個點的座標在 10 18次方之間 那麼這個資料範圍就很尷尬了 廣...

FJ省隊集訓DAY1 T1

題意 有一堆兔子,還有乙個r為半徑的圓,要求找到最大集合滿足這個集合裡的兔子兩兩連邊的直線不經過圓。思路 發現如果有兩個點之間連邊不經過圓,那麼他們到圓的切線會構成一段區間,那麼這兩個點的區間一定會有交集,形如s0 s1 e0 e1 同樣的,如果是n個點,那就是s0 s1 s2.sn e0 e1 e...

暑假集訓day1 水題 乘法最大

題目大意 有乙個長度為n的字串,要求用k個乘號將其分成k 1個部分,求各個部分相乘的最大值 輸入 第一行輸入n和k,第二行輸入乙個長度為n的字串 演算法分析 1.這個題只是乙個簡單的dp 甚至連區間dp都不是 2.dp i j 表示前i個數字裡面用了j個乘號,而列舉的狀態k表示前k個數字用了j 1個...