无线网络发射器选址 vijos 1908 NOIP2014 D2T1 模拟

随着智能手机的日益普及,人们对无线网的需求日益增大。某城市决定对城市内的公共场所覆盖无线网。

假设该城市的布局为由严格平行的 129 条东西向街道和 129 条南北向街道所形成的网格状,并且相邻的平行街道之间的距离都是恒定值 1 。东西向街道从北到南依次编号为0,1,2…128,南北向街道从西到东依次编号为 0,1,2…128。

东西向街道和南北向街道相交形成路口,规定编号为 x 的南北向街道和编号为 y 的东西向街道形成的路口的坐标是(x, y)。在某些路口存在一定数量的公共场所。

由于政府财政问题,只能安装一个大型无线网络发射器。该无线网络发射器的传播范围是一个以该点为中心,边长为 2*d 的正方形。传播范围包括正方形边界。

例如下图是一个 d = 1 的无线网络发射器的覆盖范围示意图。

图片

现在政府有关部门准备安装一个传播参数为 d 的无线网络发射器,希望你帮助他们在城 市内找出合适的安装地点,使得覆盖的公共场所最多。

简单的模拟即可。放上来凑文章数量(笑)

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<cmath>
 5 #include<queue>
 6 #include<iostream>
 7 using namespace std;
 8 template<class T> inline void read(T &_a){
 9     bool f=0;int _ch=getchar();_a=0;
10     while(_ch<'0' || _ch>'9'){if(_ch=='-')f=1;_ch=getchar();}
11     while(_ch>='0' && _ch<='9'){_a=(_a<<1)+(_a<<3)+_ch-'0';_ch=getchar();}
12     if(f)_a=-_a;
13 }
14 
15 int d,n,mp[129][129],ans,cnt;
16 
17 inline int clac(int x,int y)
18 {
19     int a=d,res=0;
20     for (register int i=max(0,x-a);i<=min(128,x+a);++i)
21         for (register int v=max(0,y-a);v<=min(128,y+a);++v)
22             res+=mp[i][v];
23     return res;
24 }
25 
26 int main()
27 {
28     read(d); read(n);
29     for (register int i=1,x,y;i<=n;++i) read(x),read(y),read(mp[x][y]);
30     for (register int i=0;i<=128;++i)
31         for (register int v=0;v<=128;++v)
32         {
33             int tmp=clac(i,v);
34             if(tmp>ans) ans=tmp,cnt=1;
35             else if (tmp==ans) ++cnt;
36         }
37     printf("%d %d",cnt,ans);
38     return 0;
39 }

 

posted @ 2017-10-27 14:58  JayWang  阅读(157)  评论(0编辑  收藏  举报