BSOJ 4852 比賽 暴力優化

2021-07-23 09:35:58 字數 1943 閱讀 5064

4852 -- 【模擬試題】比賽

description

有兩個隊伍a和b,每個隊伍都有n個人。這兩支隊伍之間進行n場1對1比賽,每一場都是由a中的乙個選手與b中的乙個選手對抗。同乙個人不會參加多場比賽,每個人的對手都是隨機而等概率的。例如a隊有a1和a2兩個人,b隊有b1和b2兩個人,那麼(a1 vs b1,a2 vs b2)和(a1 vs b2,a2 vs b1)的概率都是均等的50%。

每個選手都有乙個非負的實力值。如果實力值為x和y的選手對抗,那麼實力值較強的選手所在的隊伍將會獲得(x-y)^2的得分。

求a的得分減b的得分的期望值。

input

第一行乙個數n表示兩隊的人數為n。

第二行n個整數,第i個數a[i]表示隊伍a的第i個人的實力值。

第三行n個整數,第i個數b[i]表示隊伍b的第i個人的實力值。

output

輸出僅包含乙個實數表示a期望贏b多少分。答案保留到小數點後一位(注意精度)。

sample input2

3 7

1 5

sample output

20.0

hint

【資料規模】

對於30%的資料,n≤50。

對於100%的.據,n≤50000;a[i],b[i]≤50000。

其實題目對於這個所謂的期望的求法已經說得很清楚了,就是算兩個隊各個隊員的差值乘以概率累加,這樣說得很抽象,舉個例子。

a隊:a b c 

b隊:a  b c 

為了敘述方便,這裡設a>b>c>a>b>c

那麼期望為:

(a-a)^2/3+(b-b)^2/3+(c-c)^2/3

再假設這裡a>a,那麼期望為:

-(a-a)^2/3+(b-b)^2/3+(c-c)^2/3

這裡注意一點,為了保證精度,把分母放在最後除。

這樣乙個o(n^2)的演算法就可以得到了:列舉每個a隊員,再列舉每個b隊員,可以得到期望。

優化?

//很多這樣需要n^2優化至近似n的,大都有排序

我們注意到n^2的列舉有乙個地方太累了:它每次都去比較a隊員和b隊員的大小,再加起來,如果我們對a,b隊分別排序,就可以找到乙個邊界就結束,再者,這個邊界還可以用二分加速。

舉個例子。

team a: a b c d e f

team b:a  b  c d  e f

兩個數列都是增序排序,現在列舉到隊員a,找到b隊中的c隊員比他大,那麼根據 (a-b)^2=a^2-2ab+b^2 容易知道前面肯定有2個a^2,2個b^2,後面有4個-a^2,4個-b^2.現在再討論"ab",根據結合律,有sigma(ab)=a*sigma(b),這裡對於b的處理就跟前面的b^2是一致的----記錄字首和。

#include#include#include#include#includeusing namespace std;

typedef long long ll;

typedef double d;

typedef long double ld;

ll a[100005]= ,b[1000005]= ;

ll n,sum1[100005]=,sum2[1000005]=;

int main()

ll pointer=0;

ld ans=0;

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

cout

}

BSOJ 3800 染色 貪心

3800 四校聯考1 染色 description 人人生而平等,然而後來人們逐漸選擇了不同的道路,人與人之間,變得不再平等。你可能會因為染上惡人之色而墮落,成為社會的敗類 你也可能因為染上善人之色,而在逆境中不斷成長。但是,紅與黑並非絕對的。所謂 近朱者赤,近墨者黑 你能改變周遭的環境,那麼周遭的...

bsoj1252 工程規劃

造一棟大樓是一項艱鉅的工程,它是有n個子任務構成的,給它們分別編號1,2,3,n 5 n 1000 由於對一些任務的起始條件有著嚴格地限制,所以每個任務的起始時間t1,t2,t3 tn並不是很容易確定的 但這些起始時間都是非負整數,因為它們必須在整個工程開始後啟動 例如 挖掘完成後,緊接著就要打地基...

串列埠程式設計485

對於波特率的設定通常使用cfsetospeed和cfsetispeed函式來完成。獲取波特率資訊是通過cfgetispeed和 cfgetospeed函式來完成的。cfsetospeed函式 標頭檔案 include 函式原型 int cfsetospeed struct termios termp...