UVA 1615 Highway

题意:

  有一条沿x轴正方向,长为L的高速公路,n个村庄,要求修建最少的公路出口数目,使得每个村庄到出口的距离不大于D。

分析:

  每个村子可建出口的距离是(l-d,r+d)。将所有区间按右端点排序,若需要选择,每次都选区间右端点。

代码:

  

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <cmath>using namespace std;double l,d;int n;struct node{    double l,r;}v[100010];bool cmp(node a,node b){    if(a.r==b.r)        return a.l<b.l;    else        return a.r<b.r;}int main(){    double x,y;    while(scanf("%lf",&l)!=EOF)    {        scanf("%lf%d",&d,&n);        int i,j;        for(i=0;i<n;i++)        {            scanf("%lf%lf",&x,&y);            int len=sqrt(d*d-y*y);            v[i].l=max(x-len,0.0);            v[i].r=min(l,x+len);        }        sort(v,v+n,cmp);        int ans=1;        double r=v[0].r;        for(i=1;i<n;i++)        {            if(r>=v[i].l&&r<=v[i].r)                continue;            else            {                ans++;                r=v[i].r;            }        }        printf("%d\n",ans);    }}
时间: 2024-10-12 18:57:34

UVA 1615 Highway的相关文章

UVA - 1615 Highway(高速公路)(贪心+区间选点)

题意:给定平面上n(n<=105)个点和一个值D,要求在x轴上选出尽量少的点,使得对于给定的每个点,都有一个选出的点离它的欧几里德距离不超过D. 分析: 1.根据D可以算出每个点在x轴上的可选区域,计算出区域的左右端点. 2.贪心选点,每次都选这个区域的最右端点,这样此端点可存在于尽可能多的区域. #pragma comment(linker, "/STACK:102400000, 102400000") #include<cstdio> #include<cs

UVa 1615 Highway (贪心,区间选点问题)

题意:给定一个数 n 个点,和一个d,要求在x轴上选出尽量少的点,使得对于给定的每个点,都有一个选出的点离它的欧几里德距离不超过d. 析:首先这是一个贪心的题目,并且是区间选点问题,什么是区间选点呢,就是说在数轴上有 n 个闭区间,取尽量少的点,使得每个区间都至少有一个点. 一看是不是和这个题很相似,是的,那么区间哪里来呢?自己造呗,既然说是距离不超过d,意思就是在给定的点为圆心,以 d 为半径画圆,在x轴上的区间, 那么区间不就有了么,然后这个怎么贪心呢,是这样的,把所有的区间的右端点从小到大

UVA 1615 Highway 高速公路 (区间选点)

题意:在一条线段上选出尽量少的点,使得和所有给出的n个点距离不超过D. 分别计算出每个点在线段的满足条件的区间,然后就转化成了区间选点的问题了,按照右端点排序,相同时按照左端点排序,按照之前的排序一定保证了包含这个点的区间是连续的.贪心,每次选右边的端点,维护一个当前选择点的位置,每遇到区间就判断一下并更新一下点的位置. #include<bits/stdc++.h> using namespace std; const int maxn = 1e5+5; struct seg { doubl

UVA - 1615 Highway 区间覆盖

题目大意:在平面上有n个点和一个值D,要求再长度为L的x轴上选出尽量少的点,使得对于给定的每个点,都有一个选出的点离它的欧几里德距离不超过D 解题思路:算出每个点的区间范围.区间的重叠部分由几个区间构成就有几个点满足要求. #include<cstdio> #include<algorithm> #include<cmath> #define maxn 100010 using namespace std; double L, D; int n; struct vill

【uva 1615】Highway(算法效率--贪心 区间选点问题)

题意:给定平面上N个点和一个值D,要求在x轴上选出尽量少的点,使得对于给定的每个店,都有一个选出的点离它的欧几里德距离不超过D. 解法:先把问题转换成模型,把对平面的点满足条件的点在x轴的直线上可得到一个个区间,这样就是选最小的点覆盖所有的区间的问题了.我之前的一篇博文有较详细的解释:关于贪心算法的经典问题(算法效率 or 动态规划).代码实现我先空着.挖坑~

【习题 8-11 UVA - 1615】Highway

[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每个村庄都有一个范围[li..ri] 只要在这个范围内放点都可以"支配"这个村庄. 则问题就等价于线段上有n个区间. 让你选择最少的点. 使得每个区间内都有一个点. 将所有的区间按右端点升序排.其次左端点升序. 然后对于第一个区间. 最优的方法就是放一个点在这个区间的最右端. 这样就能最大化地利用这个点了. 放在稍微左边那么一点的话,下一个区间就可能不能包括这个点了 所以放在最右端是最好的方案了 下一个区间如果包括这个

acm刷题记录

我感觉毫无目的地刷题没有意义,便记录每周的刷题,以此激励自己! ----------6.6-------- [vijos1055]奶牛浴场                                      最大化               推荐IOI论文<浅谈用极大化思想解决最大子矩形问题> codeforces 679B - Bear and Tower of Cubes      xjb搞 codeforces  680A - Bear and Five Cards       

UVA - 1393 Highways

Description Hackerland is a happy democratic country with m×n cities, arranged in a rectangular m by n grid and connected by m roads in the east-west direction and n roads in the north-south direction. By public demand, this orthogonal road system is

Problem W UVA 662 二十三 Fast Food

Fast Food Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Practice UVA 662 Appoint description:  System Crawler  (2015-08-27) Description The fastfood chain McBurger owns several restaurants along a highway. Recen