hdu 4007
来源:互联网 发布:解数独的软件 编辑:程序博客网 时间:2024/05/29 10:09
题目
大意:在一个X-Y平面内有n个点,用一个r*r的正方形去覆盖,问最多覆盖多少个点
想法:先把坐标离散化,那最坏情况下就是一个n*n的区域,然后求最大子矩阵(矩阵的边长不能超过r)
#include<stdio.h>#include<string.h>#include<map>#include<algorithm>using namespace std;#define N 1005int a[N],b[N],n,r,k1,k2;int c[N][N],num[N][N],lx[N],ly[N],px[N],py[N];map<int,int>x,y;map<int,int>::iterator it;int main(){ while(~scanf("%d%d",&n,&r)) { x.clear(),y.clear(); memset(c,0,sizeof(c)); memset(num,0,sizeof(num)); for(int i=0;i<n;i++) { scanf("%d%d",&a[i],&b[i]); if(x[a[i]]==0) x[a[i]]=1; if(y[b[i]]==0) y[b[i]]=1; } //离散化 k1=1; for(it=x.begin();it!=x.end();it++) { x[(*it).first]=k1; lx[k1++]=(*it).first; } k2=1; for(it=y.begin();it!=y.end();it++) { y[(*it).first]=k2; ly[k2++]=(*it).first; } for(int i=0;i<n;i++) c[x[a[i]]][y[b[i]]]++;//找出离散后的某一点,把他作为正方形的一个角,相邻角的最远可能 for(int i=1;i<k1;i++) { px[i]=k1-1; for(int j=i;j<k1;j++) { if(lx[j]-lx[i]>r) {px[i]=j-1;break;} } } for(int i=1;i<k2;i++) { py[i]=k2-1; for(int j=i;j<k2;j++) { if(ly[j]-ly[i]>r) {py[i]=j-1;break;} } } for(int i=1;i<k1;i++) for(int j=1;j<k2;j++) { num[i][j]=num[i-1][j]+num[i][j-1]-num[i-1][j-1]+c[i][j]; } int ans=0; for(int i=1;i<k1;i++) for(int j=1;j<k2;j++) { int temp=num[px[i]][py[j]]-num[px[i]][j-1]-num[i-1][py[j]]+num[i-1][j-1]; ans=max(temp,ans); } printf("%d\n",ans); } return 0;}
- HDU 4007
- HDU 4007
- HDU 4007
- hdu 4007
- hdu 4007
- hdu 4007 Dave
- HDU 4007 线扫描
- hdu 4007 枚举 Dave
- hdu 4007 Dave
- hdu 4007题解
- hdu 4007 Dave
- HDU 4007 Dave
- hdu 4007 Task schedule
- HDU 4007 暴力枚举
- HDU 4007 Dave 枚举
- hdu 4007 Dave
- HDU 4007 Dave
- HDU 4007 Dave
- 2014人人笔试题
- ZOJ:2110 Tempter of the Bone
- Linux能同时启动多少个线程
- Java Collection中的List类
- Linux网络管理员:网络概论
- hdu 4007
- 【Cocos2d-X游戏实战开发】捕鱼达人之加载场景的创建(五)
- dm9000网卡驱动探究
- 一道程序员求职笔试题
- linux find命令实践
- nignx+memcached
- spring security3.x学习(10)_自定义的登录页面
- spring security3.x学习(11)_退出
- hdu 4001