贮存有公共场所路口的坐标,先枚举每个有公共场所的路口,再枚举每个能覆盖到此路口的坐标,再计算覆盖范围内的公共场所的数量,最后全图搜;
#include<bits/stdc++.h>
using namespace std;
int m,n;
int ha[129][129],kao[3][21],mp[3],wen[129][129];
void sf(int x,int y){
int e=0;
if(wen[x][y]) return;
for(int q=(x>=m ? x-m : 0);q<=(x+m<=128 ? x+m : 128);++q)
for(int w=(y>=m ? y-m : 0);w<=(y+m<=128 ? y+m : 128);++w)
e+=ha[q][w];
wen[x][y]=e;
return;
}
int main(){
// freopen("wireless.in","r",stdin);
// freopen("wireless.out","w",stdout);
scanf("%d%d",&m,&n);
for(int z=1;z<=n;++z){
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
kao[1][z]=a;
kao[2][z]=b;
ha[a][b]=c;
}
for(int z=1;z<=n;++z)
for(int x=(kao[1][z]>=m ? kao[1][z]-m : 0);x<=(kao[1][z]+m<=128 ? kao[1][z]+m : 128);++x)
for(int y=(kao[2][z]>=m ? kao[2][z]-m : 0);y<=(kao[2][z]+m<=128 ? kao[2][z]+m : 128);++y)
sf(x,y);
for(int z=0;z<=128;++z)
for(int y=0;y<=128;++y){
if(mp[1]<wen[z][y]){
mp[1]=wen[z][y];
mp[2]=1;
}
else if(mp[1]==wen[z][y]) ++mp[2];
}
printf("%d %d",mp[2],mp[1]);
}