70分求助
查看原帖
70分求助
392707
Nickle楼主2021/10/31 21:24

二位前缀和做法,WA了1,6,8

点一:
我的输出:40 10
ans: 38 10

code:

#include<bits/stdc++.h>
using namespace std;
const int N=5e3+105;
int n,r,q[N][N],ans=-214748364;
inline int read(){
	int x=0,f=1;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
	while(isdigit(ch)){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
	return x*f;
}
int cnt,ANS;
int main(){
    r=read();r=r*2+1;
	n=read();
	for(int i=1,x,y,z;i<=n;i++){
		x=read();y=read();z=read();
		q[x+1][y+1]+=z;
	}
	for(int i=1;i<=5001;i++)
		for(int j=1;j<=5001;j++)
			q[i][j]=q[i-1][j]+q[i][j-1]-q[i-1][j-1]+q[i][j];
	for(int i=0;i<=5001-r;i++)
		for(int j=0;j<=5001-r;j++){
			if(ans<q[i+r][j+r]-q[i+r][j]-q[i][j+r]+q[i][j])
                ans=q[i+r][j+r]-q[i+r][j]-q[i][j+r]+q[i][j],cnt=1;
            else if(ans==q[i+r][j+r]-q[i+r][j]-q[i][j+r]+q[i][j])cnt++;
        }    
	printf("%d %d",cnt,ans);
	return 0;		
}

2021/10/31 21:24
加载中...