zoukankan      html  css  js  c++  java
  • hdu 4007 Dave

    经典的统计题目

    题意:

    给出N个人的坐标,求出在以r为边的正方形中最多的人数

    分析:

    因为正方形的位置并未固定,而要满足覆盖最多的点,则以某一个点的y坐标作为下边界一定有最优解,所有:

    首先对N个人的纵坐标进行排序,枚举所有Y坐标(正方形下边界),找出满足以当前y坐标为下边界的正方形内的点,再枚举满足条件的点X坐标,计算以r为边最多可覆盖的点,总复杂度O(n^2)

    代码:

    #include<iostream>
    #include<algorithm>
    using namespace std;
    struct node
    {
    	int x,y;
    }p[1001];
    int n,ans,r,xx[1001],yy[1001];
    int main()
    {
    	while(scanf("%d %d",&n,&r)==2)
    	{
    		for(int i=1;i<=n;i++)
    		{
    			scanf("%d %d",&p[i].x,&p[i].y);
    			yy[i]=p[i].y;
    		}
    		sort(yy+1,yy+1+n);
    		ans=0;
    		for(int j=1;j<=n;j++)//枚举下边界
    		{
    			int cnt=0;
    			for(int i=1;i<=n;i++)
    				if(p[i].y>=yy[j]&&p[i].y<=yy[j]+r)
    					xx[cnt++]=p[i].x;//找出所有满足当前下边界的点
    			sort(xx,xx+cnt);
    			xx[cnt]=INT_MAX;//用来退出while循环
    			int e=0;
    			for(int i=0;i<cnt;i++)//求出以当前点位左边界的,边长为r的边,最多可覆盖的点
    			{
    				while(xx[e]<=xx[i]+r) e++;
    				ans=max(ans,e-i);
    			}
    		}
    		printf("%d\n",ans);
    	}
    	return 0;
    }
    
  • 相关阅读:
    java的-D命令行参数 mvn -D参数
    storm1.1运行时问题
    shell 日期转换
    storm单机运行与集群运行问题
    [log4j]Slf4j的包冲突
    搭建Spark源码研读和代码调试的开发环境
    Centos7配置
    mvn本地执行java程序
    HDP和HDF
    Django——如何在Django模板中注入全局变量?——part1
  • 原文地址:https://www.cnblogs.com/nanke/p/2168612.html
Copyright © 2011-2022 走看看