CJOJ P2110 YL杯超級籃球賽

2022-03-20 09:51:03 字數 1656 閱讀 5847

一年一度的高一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 控球後衛帶球到前...