時間限制: 1 sec 記憶體限制: 512 mb
題目描述
zyc的農場有n(1<=n<=100,000)塊連續的區域排成一排,每塊區域上都有確定數量的羊(每塊區域不超過2000千隻)。
現在zyc想要將一些區域用圍牆圍起來,作為資訊社的優秀成員,當然要給自己出點難題:他希望圍起來的區域裡羊的總數/區域數的值最大,並且保證圍起來的區域數不小於m。
輸入第一行包括兩個整數,分別表示n和m
以下n行每行乙個正整數,表示對應區域羊的數量(單位千隻)
輸出輸出最大平均數(單位只)
樣例輸入
10 66 421038
5941
樣例輸出
6500看到這道題時,我的第乙個想法是打個字首和暴力求解。於是第乙份**就出爐了。
1 #include2using
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 #include2using
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個...