#A. 发射站

比赛时的思路 用二维前缀和来做 代码



#include <bits/stdc++.h>
using namespace std;
int a[150][150],c[150][150];
int main() {
freopen("fsz.in", "r", stdin);
freopen("fsz.out", "w", stdout);
int d,n,m=0,o=0;
cin>>d>>n;
for(int i=1;i<=n;i++){
int x,y,k;
cin>>x>>y>>k;
x=max(0,x-d);
y=max(0,y-d);
a[x][y]+=k;
x=min(129,x+2*d+1);
y=min(129,y+2*d+1);
a[x][y]-=k;

}
for(int i=0;i<=128;i++){
for(int j=0;j<=128;j++){
a[i][j] = a[i+1][j] + a[i][j+1] - a[i+1][j+1] + a[i][j];
if(a[i][j]>m){
m=a[i][j];
o=1;
}
else if(a[i][j]==m){
o++;
}
}
}
cout<<o<<" "<<m;
return 0;

}

比赛后的思路 用桶遍历整个城市每一个路口将范围内的公共场所数量加在一起。

代码


```
#include <bits/stdc++.h>
using namespace std;
int a[150][150];//全城公共场所的数量统计表
int main() {
//	freopen("poly.in", "r", stdin);
//	freopen("poly.out", "w", stdout);
	int d,n,tj=0,sl=0;//d表示网络最大距离 n表示有多少的路口有公共场所 tj表示可放路口让最多公共场所有网的数量 sl表示公共场所有网的最多数量
	cin>>d>>n;//得到d n
	for(int i=1;i<=n;i++){//循环记录x,y路口有k个公共场所
		int x,y,k;
		cin>>x>>y>>k;
		a[x][y]=k;
	}
	for(int i=0;i<=128;i++){//循环128次表示将大型发射站放在x为i的点
		for(int j=0;j<=128;j++){//循环128次表示将大型发射站放在y为j的点
			int v=0;//表示范围内的公共场所
			for(int i1=max(0,i-d);i1<=min(128,i+d);i1++){
				for(int j1=max(0,j-d);j1<=min(128,j+d);j1++){
					v+=a[i1][j1];//加上路口的公共场所数量
				}
			}
			if(v>sl){
				sl=v;
				tj=1;
			}
			else if(v==sl){
				tj++;
			}
		}
	}
	cout<<tj<<" "<<sl;
	return 0;
}
```

``````/

反思

比赛的时候看题不仔细,不认真,经常在一些细节上出错,平时没有多刷题,思路断断续续改正时不仔细。

0 条评论

目前还没有评论...