2015程式設計之美資格賽 C 基站選址

2021-07-01 22:31:28 字數 1885 閱讀 5525



時間限制:

2000ms

單點時限:

1000ms

記憶體限制:

256mb

第一行為乙個整數t,表示資料組數。

每組資料第一行為四個整數:n, m, a, b。

接下來的a+b行每行兩個整數x, y,代表乙個座標,前a行表示各使用者的座標,後b行表示各通訊公司的座標。

對於每組資料輸出一行"case #x: y",x代表資料編號(從1開始),y代表所求最小代價。

1 ≤ t ≤ 20

1 ≤ x ≤ n

1 ≤ y ≤ m

1 ≤ b ≤ 100

小資料1 ≤ n, m ≤ 100

1 ≤ a ≤ 100

大資料1 ≤ n, m ≤ 107

1 ≤ a ≤ 1000

樣例輸入

2

3 3 4 1

1 22 1

2 33 2

2 24 4 4 2

1 22 4

3 14 3

1 41 3

樣例輸出

case #1: 4

case #2: 13

2.解題思路:本題要求找乙個合適的位置建立乙個基站,使得總費用最小。根據題意描述,費用包含兩個部分,第一部分是使用者到基站的歐幾里得距離的平方,第二個是到最近的通訊公司的曼哈頓距離。不難想象,這個基站的位置應該大致處於n個使用者中間的區域。其實,可以通過列式推導出最合適的位置的大致區域。

首先考慮使用者的距離之和d1=sum+sum,如果距離達到最小,那麼該點一定是乙個極小值點。根據高等數學的知識,該處的偏導數都為0,。因此可以事先對x,y求偏導。發現,x=sum/n,y=sum/n,因此可以對該點以及周圍的8個點進行搜尋。那麼曼哈頓距離此時是否為最小呢?不難發現,曼哈頓距離的改變量每移動一格只會變化最多乙個距離,但歐幾里得距離最大的變化量會大於1個距離單位,因此應該盡量保證d1達到最小。

因此,只需要在平均值以及其周圍的8個點中找出總距離最小的,就是最終的結果了。

3.**:

#define _crt_secure_no_warnings 

#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define mxn 200005

#define ll long long

#define mp make_pair

#define rep(i, a, b) for (int i = a; i <= b; ++i)

#define for(i, a, b) for (int i = a; i < b; ++i)

int dx = ;

int dy = ;

ll abs(ll x)

struct point

; point(ll x, ll y) :x(x), y(y){}

point operator - (const point& b) const //過載減號,方便輸入

void input()

ll dis() //歐幾里得距離的平方

ll len() //曼哈頓距離

}a[1005], b[105];

ll cal(point o, int a, int b) //計算(a,b)點出的總距離

int main()

cout << "case #" << ++cas << ": " << ans << endl;

} return 0;

}

2015程式設計之美(資格賽) 基站選址

時間限制 2000ms 單點時限 1000ms 記憶體限制 256mb 第一行為乙個整數t,表示資料組數。每組資料第一行為四個整數 n,m,a,b。接下來的a b行每行兩個整數x,y,代表乙個座標,前a行表示各使用者的座標,後b行表示各通訊公司的座標。對於每組資料輸出一行 case x y x代表資...

基站選址(程式設計之美2015資格賽)

時間限制 2000ms 單點時限 1000ms 記憶體限制 256mb 第一行為乙個整數t,表示資料組數。每組資料第一行為四個整數 n,m,a,b。接下來的a b行每行兩個整數x,y,代表乙個座標,前a行表示各使用者的座標,後b行表示各通訊公司的座標。對於每組資料輸出一行 case x y x代表資...

程式設計之美2015資格賽

時間限制 2000ms 單點時限 1000ms 記憶體限制 256mb 給定兩個日期,計算這兩個日期之間有多少個2月29日 包括起始日期 1.年份能被4整除但不能被100整除 2.年份能被400整除 第一行為乙個整數t,表示資料組數。之後每組資料報含兩行。每一行格式為 month day,year ...