题目转换成,每个水龙头在横坐标方向上覆盖的长度区间,转换后的问题就有点像会场安排问题了,然后接下来选的方案依据贪心,我们队这些个区间进行排序,依照区间的左端点按从小到大排序,然后从左往右选取,条件是当前区间的左端点在覆盖范围内,右端点最远。如果一次循环覆盖范围没有加大,就证明不能覆盖。

 #include<iostream>
#include<cmath>
#include<stdlib.h>
#include<string.h> using namespace std; typedef struct
{
double start;
double end;
}SE; SE a[]; int compare (const void *p1, const void *p2)
{
return (((SE *)p1)->start<((SE *)p2)->start)? :-;
} int main()
{
int T;
cin>>T;
while(T--)
{
int N;
double w, h;
cin>>N>>w>>h;
for(int i=; i<N; i++)
{
double x, r;
cin>>x>>r;
double tem = r*r-((double)h/)*((double)h/);
if(tem>=)
tem = sqrt(tem);
else
tem = ;
a[i].start = x - tem;
a[i].end = x+ tem;
}
qsort(a,N,(sizeof(a[])),compare);
/*for(int i=0; i<K; i++)
{
cout<<a[i].start<<" "<<a[i].end<<endl;
}*/
double st=, en=;
int visit[];
memset(visit,,sizeof(visit));
int num = ;
while(en<w)
{
double endest = en;
for(int i=; i<N; i++)
{
if(visit[i]==&&a[i].start<=en&&a[i].end>endest)
{
endest = a[i].end;
}
}
if(endest>en)
{
en = endest;
num++;
}
else
{
cout<<<<endl;
break;
}
}
if(en>=w)
{
cout<<num<<endl;
}
}
return ;
}

最新文章

  1. C#微信公众号开发系列教程三(消息体签名及加解密)
  2. CSS4
  3. MVC5+EF6 简易版CMS(非接口) 第四章:使用业务层方法,以及关联表解决方案
  4. 再谈扩展方法,从string.IsNullOrEmpty()说起
  5. Fibonacci
  6. 青少年如何使用 Python 开始游戏开发
  7. DuiLib——第一篇UIManager
  8. java cpu缓存
  9. android 休眠唤醒机制分析(三) — suspend
  10. unity3d教程动态创建简单平面地形
  11. android从assets读取文件的方法
  12. Java眼中的XML文件写入
  13. permutations II(全排列 2)
  14. asp.net core 集成 log4net 日志框架
  15. kmp算法 模板
  16. Spring Boot 初识
  17. Oracle——存储过程简单入门实例
  18. k8s单机部署1.11.5
  19. linux AB web 性能测试工具
  20. Flask script 内的Shell 类 使用

热门文章

  1. 【LeetCode】合并两个有序链表
  2. 《python基础教程(第二版)》学习笔记 字符串(第3章)
  3. TP里的关联查询
  4. Linux开发引导
  5. SpringCloud-服务的注册与发现(Eureka)
  6. ML一(概念学习和一般到特殊序)
  7. Python基础-处理json函数
  8. android sqlite,大数据处理、同时读写
  9. log4net调试
  10. 洛谷P2878 [USACO07JAN]保护花朵Protecting the Flowers