YL杯超級籃球賽 紀中1325 帶權中位數

2021-07-14 13:03:51 字數 2796 閱讀 9180

一年一度的高一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杯的每個班都有一套相似的進攻戰術 ...