一年一度的高一yl杯超級籃球賽開賽了。當然,所謂超級,意思是參賽人數可能多餘5人。小三對這項籃球非常感興趣,所以一場都沒有落下。每個中午都準時守侯在籃球場看比賽。經過乙個星期的研究,小三終於對籃球的技戰術找到了一絲絲感覺了。他發現打yl杯的每個班都有一套相似的進攻戰術:
- 控球後衛帶球到前場,找到乙個最佳攻擊點 ( x , y )
- 所有除控衛以外的隊員都從各自的當前位置迅速向 ( x , y ) 移動
- 控球後衛根據場上情況組織進攻
這個戰術對於一般情況是非常奏效的,但是每個隊員畢竟不像小三一樣每天精力過剩,每個隊員都有乙個疲勞指數w,顯然對於每個隊員的移動需要消耗一些能量。
假設乙個隊員從位置 ( x1 , y1 ) 移動到 ( x , y )的能量消耗為 w * (abs ( x - x1 ) +abs ( y - y1 ) ), 這裡abs為絕對值函式。那麼我們希望整個隊伍一次進攻的能量消耗當然是越少越好。顯然能量消耗的多少直接取決於控球後衛對於攻擊點 ( x , y )的選擇。
因為參賽人數眾多,所以小三希望你能編寫乙個程式,即幫他找出某個時刻的最佳攻擊點。
第一行:乙個整數n,表示籃球隊人數
第二行:一共n個整數,其中的第i個數wi表示第i個隊員的疲勞指數。
第3~n+2行:每一行兩個整數x和y,其中的第i+2行,表示第i個隊員的當前位置的橫座標和縱座標。
乙個實數。表示所有隊員集合到最佳攻擊位置的能量消耗總和,答案保留兩位小數。
1 1
0 00.00
n<=50000,x,y都在longint範圍內。
這什麼鬼啊尼瑪!完全沒有思路/(ㄒoㄒ)/~~
經過一陣愉♂快♂的學習之後,大神指出這是帶權中位數1的模板題
遞推演算法:方法:利用前面的結論和帶權中位數的定義,只需要依次掃瞄即可。
時間複雜度:o(n)
演算法實現:
計算總的人數和,初始左邊總人數為0;
當前點t從1開始計算
若左邊的總人數+當前點的人數《總人數的一半,則轉4,否則轉5
則把當前點的人數累加到左邊總人數和中,當前點後移一位(t=t+1),轉3
t點就是我們所求的最優點
計算到t點的總代價和。
type
arr=array[1..60000]of longint;
var x,y,v,w:arr;
n,sum:longint;
procedure
swap
(var x,y:longint);
var tmp:longint;
begin
tmp:=x;
x:=y;
y:=tmp;
end;
procedure
qsort
(var a:arr;l,r:longint);
var x,y,key:longint;
begin
if l>=r then
exit;
x:=l;
y:=r;
key:=a[l+random(r-l+1)];
repeat
while (a[x]do inc(x);
while (a[y]>key) do dec(y);
if x<=y then
begin
swap(a[x],a[y]);
swap(w[x],w[y]);
inc(x);
dec(y);
end;
until x>y;
qsort(a,l,y);
qsort(a,x,r);
end;
function
work
(a:arr):real;
var i,t,f:longint;
begin
t:=0;
for i:=1
to n do
begin
t:=t+w[i];
if t>sum/2
then
begin
f:=a[i];
break;
end;
end;
work:=0;
for i:=1
to n do
if a[i]<>f then
work:=work+w[i]*abs(f-a[i]);
end;
procedure
main;
var ans:real;
begin
v:=w;
qsort(x,1,n);
ans:=work(x);
w:=v;
qsort(y,1,n);
ans:=ans+work(y);
writeln(ans:0:2);
end;
procedure
init;
var i:longint;
begin
readln(n);
for i:=1
to n do
begin
read(w[i]);
inc(sum,w[i]);
end;
for i:=1
to n do
read(x[i],y[i]);
end;
begin
init;
main;
end.
傳送門
↩
YL杯超級籃球賽 紀中 1325
題目大意 一年一度的高一yl杯超級籃球賽開賽了。當然,所謂超級,意思是參賽人數可能多餘5人。小三對這項籃球非常感興趣,所以一場都沒有落下。每個中午都準時守侯在籃球場看比賽。經過乙個星期的研究,小三終於對籃球的技戰術找到了一絲絲感覺了。他發現打yl杯的每個班都有一套相似的進攻戰術 1 控球後衛帶球到前...
YL杯超級籃球賽
operatorname jzoj13 25一年一度的高一yl杯超級籃球賽開賽了。當然,所謂超級,意思是參賽人數可能多餘 5 55 人。小三對這項籃球非常感興趣,所以一場都沒有落下。每個中午都準時守侯在籃球場看比賽。經過乙個星期的研究,小三終於對籃球的技戰術找到了一絲絲感覺了。他發現打yl杯的每個班...
YL杯超級籃球賽 Standard IO
題意 description 一年一度的高一yl杯超級籃球賽開賽了。當然,所謂超級,意思是參賽人數可能多餘5人。小三對這項籃球非常感興趣,所以一場都沒有落下。每個中午都準時守侯在籃球場看比賽。經過乙個星期的研究,小三終於對籃球的技戰術找到了一絲絲感覺了。他發現打yl杯的每個班都有一套相似的進攻戰術 ...