1 条题解

  • 1
    @ 2022-7-14 19:49:20
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int n,ans=0;
    int a[101][101];
    int main()
    {
    	scanf("%d",&n);
    	for(register int i=1;i<=n;i++)
    	{
    	    int x,y;
    	    scanf("%d%d",&x,&y);
    	    a[x][y]+=1;//一个点就是一个1的权值
    	}
    	for(register int x=1;x<=100;x++)
    	for(register int y=1;y<=100;y++)
    	a[x][y]+=a[x-1][y]+a[x][y-1]-a[x-1][y-1];//记录以(1,1)为左上角,(x,y)为右下角的矩形的权值和
    	for(register int i=1;i<=99;i++)
    	for(register int j=1;j<=99;j++)
    	for(register int x=i+1;x<=100;x++)
    	for(register int y=j+1;y<=100;y++)
    	{
    	    int sum1=a[x][y]-a[x][j-1]-a[i-1][y]+a[i-1][j-1];//(大矩形的权值和)应该很好理解吧,不能理解的可以画个图感性理解,理性分析一下
    	    int sum2=a[x-1][y-1]-a[x-1][j]-a[i][y-1]+a[i][j];//小矩形的权值和,同上
    	    sum1-=sum2;//边界的值 边界上点的个数
    	    ans=ans<sum1?sum1:ans;//和ans比较大小
    	}
    	printf("%d",ans);
    	return 0;
    }
    
    • 1

    信息

    ID
    369
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    3
    已通过
    2
    上传者