Noip 2014 senior Day2 无线网络发射器选址(wireless)

Noip 2014 senior Day2 无线网络发射器选址(wireless)

       这道题的大概意思呢就是说,你现在拥有一个路由器(每个都可以发送Wi-Fi),然后那个路由器有一定的范围(因为你又买不起覆盖那么远的),然而你有很多条街道上的很多个路口需要覆盖(随时都可以上网),所以你需要找到你能覆盖最多路口的安装地点方案数,以及路口数量。

       经过我详细的分析是不是豁然开朗!(不用你说我也知道是什么意思)怎么做呢?枚举答案就好了。我们在题目所说的那横竖129条街道上(共129 * 129的矩形)枚举,这里唯一需要注意的就是你向左或向右查找范围的时候,注意不要超出边界了。处理呢,一个是把所有的图都扩大,一个是对边界和当前值取一个最大、最小,这样就能保证边界的情况了。

  

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #define N 150
 6 #define inf 0x7fffffff
 7 #define pi acos(-1)
 8 using namespace std;
 9 
10 inline long long read(){ 
11     long long data=0,w=1; 
12     char ch=0; 
13     while(ch!='-' && (ch<'0' || ch>'9')) ch=getchar(); 
14     if(ch=='-') w=-1,ch=getchar(); 
15     while(ch>='0' && ch<='9') data=data*10+ch-'0',ch=getchar(); 
16     return data*w;
17 }
18 
19 inline void write(long long x)
20 {
21      if(x<0) putchar('-'),x=-x;
22      if(x>9) write(x/10);
23      putchar(x%10+'0');
24 }
25 
26 int maps[N][N];
27 int d,n;
28 int xi,yi,ki;
29 int sum,maxn;
30 
31 int main()
32 {
33     freopen("wireless.in","r",stdin);
34     freopen("wireless.out","w",stdout);
35     
36     d = read();
37     n = read();
38     for(int i=1;i<=n;i++)
39     {
40         xi = read();
41         yi = read();
42         ki = read();
43         maps[xi][yi] = ki;
44     }
45     for(int i=0;i<=128;i++)
46     {
47         for(int j=0;j<=128;j++)
48         {
49             long long aider = 0;
50             for(int u=max(0,i-d);u<=min(128,i+d);u++)
51             {
52                 for(int v=max(0,j-d);v<=min(128,j+d);v++)
53                 {
54                     aider += maps[u][v];
55                 }
56             }
57             if(aider > maxn)
58             {
59                 maxn = aider;
60                 sum = 1;
61             }
62             else if(aider == maxn) sum++;
63         }
64     }
65     write(sum);
66     putchar(' ');
67     write(maxn);
68     
69     return 0;
70 }
原文地址:https://www.cnblogs.com/sin-mo/p/7191800.html