1 条题解
-
1
#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
- 上传者