1. 程式人生 > >noip2014無線網路發射器選址

noip2014無線網路發射器選址

題目描述

隨著智慧手機的日益普及,人們對無線網的需求日益增大。某城市決定對城市內的公共場所覆蓋無線網。

假設該城市的佈局為由嚴格平行的 129 條東西向街道和 129 條南北向街道所形成的網格狀,並且相鄰的平行街道之間的距離都是恆定值 11。東西向街道從北到南依次編號為 0,1,2128,南北向街道從西到東依次編號為 0,1,2128。

東西向街道和南北向街道相交形成路口,規定編號為 x 的南北向街道和編號為 y 的東西向街道形成的路口的座標是(x,y)。在某些路口存在一定數量的公共場所。

由於政府財政問題,只能安裝一個大型無線網路發射器。該無線網路發射器的傳播範圍是一個以該點為中心,邊長為 2d 的正方形。傳播範圍包括正方形邊界。

現在政府有關部門準備安裝一個傳播引數為 d 的無線網路發射器,希望你幫助他們在城市內找出合適的路口作為安裝地點,使得覆蓋的公共場所最多。

輸入輸出格式

輸入格式:

 

第一行包含一個整數 d,表示無線網路發射器的傳播距離。

第二行包含一個整數 n,表示有公共場所的路口數目。

接下來 n 行,每行給出三個整數 x,y,k,中間用一個空格隔開,分別代表路口的座標 (x,y) 以及該路口公共場所的數量。同一座標只會給出一次。

 

輸出格式:

 

輸出一行,包含兩個整數,用一個空格隔開,分別表示能覆蓋最多公共場所的安裝地點方案數,以及能覆蓋的最多公共場所的數量。

 

輸入輸出樣例

輸入樣例#1: 複製
1  
2  
4 4 10  
6 6 20  
 
輸出樣例#1: 複製
1 30

說明

對於100%的資料,1d20,1n20,0x128,0y128,0<k1000000

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<cmath>
 4
#include<algorithm> 5 using namespace std; 6 int i,j,z,e,d,xm,xn,ym,ye,op = 0,da = 0,ans = 0,n,x,y,k,s[130][130] = {0}; 7 int main() 8 { 9 scanf("%d",&d); 10 scanf("%d",&n); 11 for(i = 1;i <= n;i++) 12 { 13 scanf("%d %d %d",&x,&y,&k); 14 s[x][y] = k; 15 } 16 for(i = 0;i <= 128;i++) 17 { 18 for(e = 0;e <= 128;e++) 19 { 20 xm = i + d; 21 if(xm > 128) 22 xm = 128; 23 xn = i - d; 24 if(xn < 0) 25 xn = 0; 26 ym = e + d; 27 if(ym > 128) 28 ym = 128; 29 ye = e - d; 30 if(ye < 0) 31 ye = 0; 32 op = 0; 33 for(j = xn;j <= xm;j++) 34 { 35 for(z = ye;z <= ym;z++) 36 { 37 op += s[j][z]; 38 } 39 } 40 if(op > da) 41 { 42 da = op; 43 ans = 1; 44 } 45 else if(op == da) 46 ans++; 47 } 48 } 49 printf("%d %d",ans,da); 50 return 0; 51 }

**********模擬啊,列舉每一個路口,設施多就更改,一樣就方案數加一。