喷水装置二 nyoj12
来源:互联网 发布:电脑管家婆软件 编辑:程序博客网 时间:2024/06/09 18:21
来源:http://acm.nyist.net/JudgeOnline/problem.php?pid=12
有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的喷水装置,每个喷水装置i喷水的效果是让以它为中心半径为Ri的圆都被润湿。请在给出的喷水装置中选择尽量少的喷水装置,把整个草坪全部润湿。
- 输入
- 第一行输入一个正整数N表示共有n次测试数据。
每一组测试数据的第一行有三个整数n,w,h,n表示共有n个喷水装置,w表示草坪的横向长度,h表示草坪的纵向长度。
随后的n行,都有两个整数xi和ri,xi表示第i个喷水装置的的横坐标(最左边为0),ri表示该喷水装置能覆盖的圆的半径。 - 输出
- 每组测试数据输出一个正整数,表示共需要多少个喷水装置,每个输出单独占一行。
如果不存在一种能够把整个草坪湿润的方案,请输出0。 - 样例输入
22 8 61 14 52 10 64 56 5
- 样例输出
- 1
- 2
- 易知半径为r的喷水装置可以覆盖以2*sqrt(r*r-length*length/4) (r*r-length*length/4>0)为宽,length为长的矩形,但此题加了坐标限制,那么以x为中心的喷水装置就可以覆盖[x-temp,x+temp]的长度 (temp=sqrt(r*r-length*length/4,temp>=0)
- 如果没有坐标限制,直接贪心,每次取能覆盖最大的,直至全部覆盖,其解即为最优解.
- 有了坐标限制,那么可以按照这样的策略进行贪心,先对每个喷水装置以左区间的值进行从小到大排序(从左边开始覆盖,进行选择)
- 贪心过程:
- 选择的喷水装置左区间必须小于或等于当前已经覆盖的长度,否则这样会有空隙.对喷水装置所能覆盖的右区间进行筛选,选择往右覆盖最大的加入最优解中,如果最大往右覆盖为0且没有完全覆盖,则表明不存在方案.
- Ac code:
- #include<stdio.h>
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
struct Dist
{
double left,right;
}w[10002];
int comp(const void *p1,const void *p2)
{
return ((*(Dist*)p1).left)>((*(Dist*)p2).left)?1:-1;
}
int main()
{
int test;
scanf("%d",&test);
while(test--)
{
memset(w,0,sizeof(w));
int num,width,length,i,x,ri;
scanf("%d%d%d",&num,&width,&length);
for(i=0;i<num;++i)
{
scanf("%d%d",&x,&ri);
double temp=ri*ri-(length*length)/4;
if(temp>=0) temp=sqrt(temp);
else temp=0;
w[i].left=int(x-temp);
w[i].right=int(x+temp);
}
qsort(w,num,sizeof(w[0]),comp); //左区间排序
double sum=0,flag=1,Count=0;
i=0;
while(sum<width)
{
double j=0;
for(i;w[i].left<=sum&&i<num;i++)
{
if(w[i].right-sum>=j)
j=w[i].right-sum;
}
if(j==0)
{ flag=0;break; }
sum=sum+j;
Count++;
}
if(!flag)
cout<<0<<endl;
else
cout<<Count<<endl;
}
}
- 喷水装置二 nyoj12
- NYOJ12喷水装置(二)
- nyoj12 喷水装置(二)
- NYOJ12,喷水装置(二)
- NYOJ12喷水装置(二)
- nyoj12 喷水装置(二)
- nyoj12喷水装置(二)
- nyoj12 喷水装置(二)
- NYOJ12 喷水装置(二)
- 贪心nyoj12 喷水装置(二)
- NYOJ12 喷水装置(二)【贪心】
- NYOJ12 喷水装置(二)【贪心】
- nyoj12 喷水装置(二)贪心
- nyoj12-喷水装置(二)(贪心)
- NYOJ12 喷水装置(二)(贪心)
- NYOJ12——喷水装置(二)(贪心算法)
- 贪心算法之——喷水装置二(nyoj12)
- 喷水装置2(nyoj12)
- Facebook的搜索引擎绝不会像谷歌
- 火线,零线,地线各自颜色和作用(转载)
- 第1章、从零开始学Android
- ffmpeg
- 黑马程序员_看毕老师视频第一天的小结之环境变量的设置
- 喷水装置二 nyoj12
- Cloud Foundry 入门教程[汇总]
- HBase集群出现NotServingRegionException问题的排查及解决方法
- 通过openURL启动第三方app并传参数
- vc文件复制和删除及移动和重命名
- 对中文版“Siri”打个招呼吧!
- C++中的指针与引用
- 最绝望的时候能否看到新的希望
- jquery easyui Tab 引入页面的问题