#include<bits/stdc++.h>
using namespace std;
long long mapp[200][200];
long long d,n,a,b,k;
int main(){
cin>>d>>n;
for(int i=0;i<n;i++){
cin>>a>>b>>k;
mapp[a][b]=k;
}
long long tmp,ans,num;
ans=0;num=0;
for(int i=0;i<129-2*d;i++)
for(int j=0;j<129-2*d;j++){
tmp=0;
for(int x=i;x<=i+2*d;x++)
for(int y=j;y<=j+2*d;y++)
if(mapp[x][y]) tmp+=mapp[x][y];
if(tmp>ans){
ans=tmp;
num=1;
}
else if(tmp==ans) num++;
}
cout<<num<<' '<<ans;
return 0;
}
啊本来我是这么做的,但是死活过不了三个点
这时我翻了翻讨论区发现一位dalao
我测试半天,心中有个巨大的疑问;
啊我发现了问题;
改一改:
#include<bits/stdc++.h>
using namespace std;
long long mapp[200][200];
long long d,n,a,b,k;
int main(){
cin>>d>>n;
for(int i=0;i<n;i++){
cin>>a>>b>>k;
mapp[a][b]=k;
}
long long tmp,ans,num;
ans=0;num=0;
for(int i=0;i<129-d;i++)//和这里
for(int j=0;j<129-d;j++){//改动了这里
tmp=0;
for(int x=i;x<=i+2*d;x++)
for(int y=j;y<=j+2*d;y++)
if(mapp[x][y]) tmp+=mapp[x][y];
if(tmp>ans){
ans=tmp;
num=1;
}
else if(tmp==ans) num++;
}
cout<<num<<' '<<ans;
return 0;
}
测试还是不对;
怎么办呢;
再改一改
#include<bits/stdc++.h>
using namespace std;
long long mapp[200][200];
long long d,n,a,b,k;
int main(){
cin>>d>>n;
for(int i=0;i<n;i++){
cin>>a>>b>>k;
mapp[a+d][b+d]=k;//改动了这里
}
long long tmp,ans,num;
ans=0;num=0;
for(int i=0;i<=128;i++)//又改了这里
for(int j=0;j<=128;j++){//还有这里
tmp=0;
for(int x=i;x<=i+2*d;x++)
for(int y=j;y<=j+2*d;y++)
if(mapp[x][y]) tmp+=mapp[x][y];
if(tmp>ans){
ans=tmp;
num=1;
}
else if(tmp==ans) num++;
}
cout<<num<<' '<<ans;
return 0;
}
妈呀可算是过了
所以边界条件一定要小心啊