无线网络发射器选址 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 }