第九屆藍橋杯 付賬問題

2021-10-05 10:51:45 字數 1664 閱讀 6940

【題目描述】

幾個人一起出去吃飯是常有的事。但在結帳的時候,常常會出現一些爭執。

現在有 n 個人出去吃飯,他們總共消費了 s 元。

其中第 i 個人帶了ai 元。

幸運的是,所有人帶的錢的總數是足夠付賬的,但現在問題來了:每個人分別要出多少錢呢?

為了公平起見,我們希望在總付錢量恰好為 s 的前提下,最後每個人付的錢的標準差最小。

這裡我們約定,每個人支付的錢數可以是任意非負實數,即可以不是1分錢的整數倍。你需要輸出最小的標準差是多少。

標準差的介紹:標準差是多個數與它們平均數差值的平方平均數,一般用於刻畫這些數之間的「偏差有多大」。

形式化地說,設第 i 個人付的錢為 bi 元,那麼標準差為 :

【輸入格式】第一行包含兩個整數 n、s;

第二行包含 n 個非負整數 a1,  …,  an。

【輸出格式】

輸出最小的標準差,四捨五入保留 4 位小數。

保證正確答案在加上或減去 10−9 後不會導致四捨五入的結果發生變化。

【樣例輸入1】

5 2333

666 666 666 666 666

【樣例輸出1】

0.0000

【樣例解釋】每個人都出 2333/5 元,標準差為 0。

【樣例輸入2】

10 30

2 1 4 7 4 8 3 6 4 7

【樣例輸出2】

0.7928

【評測用例規模與約定】對於 10% 的資料,所有 ai 相等;

對於 30% 的資料,所有非 0 的 ai 相等;

對於 60% 的資料,n ≤ 1000;

對於 80% 的資料,n ≤ 105;

對於所有資料,n ≤ 5 × 105,  0 ≤ ai ≤ 109。

題解

數論 & 貪心:

#include

#include

#include

#include

#include

using

namespace std;

const

int n =

500010

;int n;

int a[n]

;int

main()

else

// 錢再多,也只付平均數

}printf

("%.4lf"

,sqrt

(ans / n));

// 標準差 == 方差開根號

return0;

}

第九屆藍橋杯省賽C A組 付賬問題

題目描述 幾個人一起出去吃飯是常有的事。但在結帳的時候,常常會出現一些爭執。現在有 n 個人出去吃飯,他們總共消費了 s 元。其中第 i 個人帶了 ai 元。幸運的是,所有人帶的錢的總數是足夠付賬的,但現在問題來了 每個人分別要出多少錢呢?為了公平起見,我們希望在總付錢量恰好為 s 的前提下,最後每...

藍橋杯第九屆決賽

x星球的鈔票的面額只有 100元,5元,2元,1元,共4種。小明去x星旅遊,他手裡只有2張100元的x星幣,太不方便,恰好路過x星銀行就去換零錢。小明有點強迫症,他堅持要求200元換出的零鈔中2元的張數剛好是1元的張數的10倍,剩下的當然都是5元面額的。銀行的工作人員有點為難,你能幫助算出 在滿足小...

第九屆藍橋杯 螺旋折線

如圖p1.png所示的螺旋折線經過平面上所有整點恰好一次。對於整點 x,y 我們定義它到原點的距離dis x,y 是從原點到 x,y 的螺旋折線段的長度。例如dis 0,1 3,dis 2,1 9 給出整點座標 x,y 你能計算出dis x,y 嗎?輸入格式 x和y 對於40 的資料,1000 x,...