一年一度的高一yl杯超級籃球賽開賽了。當然,所謂超級的意思是參賽人數可能多於5人。小三對這場籃球賽非常感興趣,所以一場都沒有落下。每天中午都準時守候在籃球場看比賽。經過乙個星期的研究,小三終於對籃球的技戰術找到了一絲絲感覺。他發現打yl杯的每個班都有一套相似的進攻戰術:
1.控球後衛帶球到前場,找到乙個最佳攻擊點(x,y)。
2.所有除控衛以外的隊員都從各自的當前位置迅速向(x,y)移動。
3.控球後衛根據場上情況組織進攻。
這個戰術對於一般情況是非常奏效的,但是每個隊員畢竟不像小三一樣每天精力過剩,每個隊員都有乙個疲勞指數w,顯然對於每個隊員的移動需要消耗一些能量。
假設乙個隊員從位置xl,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個隊員的當前位置的橫座標和縱座標。
乙個實數。表示所有隊員集合到最佳攻擊位置的能量消耗總和,答案保留兩位小數。11
0 00.00
n<=50000
0<w<=1000
0<x,y<=1000000
這道題有點像士兵站隊問題,每乙個人的疲勞值直接看成重複的幾個人即可。可以自己試著畫一下,發現會很簡單。把每個人的橫座標、縱座標全部排序,然後依次就中位數計算就可以了,具體的證明請自己溫習初一的絕對值距離。這道題的寫法很好的利用到了中位數/絕對值的使用。
#include#include#include#include#include#includeusing namespace std;
int w[50001],n;
long long sum=0;
struct dsl
;//結構體定義
bool cmp(dsl k,dsl d)
for(int i=1;i<=n;++i)
scanf("%d%d",&x[i].a,&y[i].a);
//排序
sort(&x[1],&x[n+1],cmp);
sort(&y[1],&y[n+1],cmp);
//計算
int k;
cd=int(((cd+1)/2)+0.5);
long long g=cd;
for(int i=1;i<=n;++i)
}for(int i=1;i<=n;++i)
sum+=abs(x[k].a-x[i].a)*x[i].w;
cd=g;
for(int i=1;i<=n;++i)
}for(int i=1;i<=n;++i)
sum+=abs(y[k].a-y[i].a)*y[i].w;
//利用絕對值進行計算
//輸出
cout/由絕對值的最小值和題目資料可知,結果一定是乙個整數
//但是要求輸出的事小數點後兩位,所以直接列印".00"
return 0;
}
YL杯超級籃球賽
operatorname jzoj13 25一年一度的高一yl杯超級籃球賽開賽了。當然,所謂超級,意思是參賽人數可能多餘 5 55 人。小三對這項籃球非常感興趣,所以一場都沒有落下。每個中午都準時守侯在籃球場看比賽。經過乙個星期的研究,小三終於對籃球的技戰術找到了一絲絲感覺了。他發現打yl杯的每個班...
YL杯超級籃球賽 Standard IO
題意 description 一年一度的高一yl杯超級籃球賽開賽了。當然,所謂超級,意思是參賽人數可能多餘5人。小三對這項籃球非常感興趣,所以一場都沒有落下。每個中午都準時守侯在籃球場看比賽。經過乙個星期的研究,小三終於對籃球的技戰術找到了一絲絲感覺了。他發現打yl杯的每個班都有一套相似的進攻戰術 ...
YL杯超級籃球賽 紀中 1325
題目大意 一年一度的高一yl杯超級籃球賽開賽了。當然,所謂超級,意思是參賽人數可能多餘5人。小三對這項籃球非常感興趣,所以一場都沒有落下。每個中午都準時守侯在籃球場看比賽。經過乙個星期的研究,小三終於對籃球的技戰術找到了一絲絲感覺了。他發現打yl杯的每個班都有一套相似的進攻戰術 1 控球後衛帶球到前...