HDOJ喷水装置(二)--区间完全覆盖问题
来源:互联网 发布:有趣的程序员密码 编辑:程序博客网 时间:2024/05/17 02:23
http://acm.nyist.net/JudgeOnline/problem.php?pid=12&rec=sim
#include<math.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define M 10010
struct zb
{
double a,b;
}c[M];
int cmp(zb p,zb q) //按左端点升序排列
{
return p.a<q.a;
}
int main()
{
int N,n,w,h,i,j,k;
int x,r;
int t,lap;
double a_max,b_max,tem;
cin>>N;
while(N--)
{
t=0;
lap=0;
cin>>n>>w>>h;
for(i=0,j=-1;i<n;i++)
{
cin>>x>>r;
if(2*r>h)
{
++j;
c[j].a=x-sqrt(pow(r,2)-pow(h/2,2));
c[j].b=x+sqrt(pow(r,2)-pow(h/2,2));
}
}
j++; //0到j,j+1个数
sort(c,c+j,cmp);
b_max=0;
for(i=0;i<j;i++)
{
if(c[i].a<=b_max) //如果第一个不小于0,那么接下来的都不小于0 ,不过按此判断太费时间
{
tem=c[i].b; //while第一步先从所有左端点<=0的线段中找出右端点最大的那个!!!
while(c[i].a<=b_max) //从所有符合要求的线段中找出右端点最大的那个
{
tem=c[i].b>tem?c[i].b:tem;
i++;
if(i==n)
break;
}
b_max=tem;
t++; //每找一条加一次
i--; //for循环中还要加一次,所以先减1
}
if(b_max>=w)
break;
}
if(b_max>=w)
cout<<t<<endl;
else
cout<<"0"<<endl;
}
return 0;
}
- HDOJ喷水装置(二)--区间完全覆盖问题
- 喷水装置(二)--区间覆盖问题
- 南阳 12 喷水装置(二)区间覆盖问题
- 喷水装置(二) +区间覆盖-基础问题-贪心
- 【喷水装置(二) 区间覆盖 贪心。】
- nyoj 12 喷水装置(二)【贪心】+【区间完全覆盖覆盖】
- NYOJ 喷水装置(二)(区间覆盖)
- nyoj 12 喷水装置(二) 贪心 区间覆盖
- NYOJ 12 喷水装置(二)【贪心+区间覆盖】
- 最小区间覆盖(南洋理工—喷水装置二)
- 喷水装置(二)(南阳oj12)(贪心之区间覆盖问题)
- nyoj--12--喷水装置(二)(区间覆盖问题+贪心)
- NYOJ 题目12 喷水装置(二) 最小区间覆盖问题
- 喷水装置(二) 区间长度贪心
- NYOJ——12 喷水装置(二)(区间覆盖)
- NYOJ 6 喷水装置(一) 贪心算法 之 区间覆盖问题
- NYOJ 12 喷水装置(2)贪心之区间覆盖问题
- NYOJ-12 喷水装置2(贪心 区间覆盖)
- 面试题28:求字符的全排列
- Linux 内核优化
- IntelliJ Idea 常用快捷键列表
- Android文本样式——下
- java8带来的配置问题
- HDOJ喷水装置(二)--区间完全覆盖问题
- Spark入门(Python版)
- OpenGL 矩阵变换
- javascript验证html5自带input type="date"用户输入日期过期的方法
- Eclipse安装SVN插件
- 从ucOS谈,为什么需要操作系统?
- 经典排序算法--冒泡排序
- aaaaa
- linux 命令 which whereis find locate