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多少分。答案保留到小數點後一位(注意精度)。
題解∑(a[i]-b[i))^2
注意字尾數要在排序後t_y
**
type
arr=array [0..50001] of int64;
var n:longint;
ans:extended;
a,b,ansb,sumb:arr;
procedure
qsort
(var o:arr; l,r:longint);
var i,j,m,t:longint;
begin
i:=l; j:=r;
m:=o[(l+r) div
2]; repeat
while o[i]do inc(i);
while o[j]>m do dec(j);
if i<=j then
begin
t:=o[i]; o[i]:=o[j]; o[j]:=t;
inc(i); dec(j);
end;
until i>j;
if lthen qsort(o,l,j);
if ithen qsort(o,i,r);
end;
procedure
init;
var i:longint;
begin
readln(n);
for i:=1
to n do
read(a[i]);
qsort(a,1,n);
for i:=1
to n do
read(b[i]);
qsort(b,1,n);
ansb[0]:=0; sumb[0]:=0;
for i:=1
to n do
begin
ansb[i]:=ansb[i-1]+b[i];
sumb[i]:=sumb[i-1]+b[i]*b[i];
end;
end;
procedure
main;
var i,t:longint;
begin
ans:=0; t:=0;
for i:=1
to n do
begin
while (tand (a[i]>b[t+1]) do inc(t);
ans:=ans+a[i]*a[i]*(2*t-n);
ans:=ans+2*sumb[t]-sumb[n];
ans:=ans-2*a[i]*(2*ansb[t]-ansb[n]);
end;
write(ans/n:0:1);
end;
begin
init;
main;
end.
NOIP2012模擬10 25 旅行
給定乙個n行m列的字元矩陣,代表空地,x 代表障礙。移動的規則是 每秒鐘以上下左右四個方向之一移動一格,不能進入障礙。計算 在空地中隨機選擇起點和終點 可以重合,此時最短耗時為0 從起點移動到終點最短耗時的平均值。每一行每一列至多有1個障礙,並且障礙不在對角線方向相鄰。以下矩陣是不合法的 x x.第...
NOIP2012模擬10 25 剪草
首先分析的出兩個結論,1 每棵草最多隻剪一次 2 按照生長速度,先剪小的,再剪大的。不難證明,略。那麼把小草按生長速度從大到小排個序後,設f i,j 表示,在倒數第i個時刻,已經處理了j棵草時的最小高度和。轉移為f i j min f i j 1 f i 1 j 1 a j g a ns i 1 a...
NOIP2012模擬10 25 旅行
給定乙個n行m列的字元矩陣,代表空地,x 代表障礙。移動的規則是 每秒鐘以上下左右四個方向之一移動一格,不能進入障礙。計算 在空地中隨機選擇起點和終點 可以重合,此時最短耗時為0 從起點移動到終點最短耗時的平均值。每一行每一列至多有1個障礙,並且障礙不在對角線方向相鄰。以下矩陣是不合法的 xx.50...