评测传送门

【题目描述】

llg 是一名快乐的农民,他拥有一个很大的农场,并且种了各种各样的瓜果蔬菜,到了每年秋天,他就可以把所有蔬菜水果卖到市场上,这样他就可以获利。但今年他遇到了一个难题——有许多鸟来到了他的农场偷吃他的瓜果蔬菜。不知所措的 llg 只好求助于 jump,万能的 jump 于是给了 llg 一些稻草人(据说可以驱鸟)。每个庄稼都可以看做是坐标系里面的一个点,当它处于某个稻草人的范围内时就可以视为被保护。可是每个稻草人的辐射范围有限,根据测定,每个稻草人的辐射范围都是一个半径为 R 的圆,llg 很懒,所以他只打算把稻草人放在坐标系的 x 轴上,而任何庄稼(x,y)都满足 y>0。图中的小红点就是庄稼,蓝点即稻草人放的位置。现在请你来帮助 llg设计一个方案,用尽可能少的稻草人来保证所有庄稼都是安全的。若存在无法覆盖的庄稼或者 jump 给的稻草人不够覆盖所有庄稼,请输出-1。


【输入数据】
每个测试点含多组数据
每组数据第一行包含 n,R,C;分别表示庄稼的数量、稻草人的最大覆盖半径,命题人:黎锦灏
稻草人的数量。
接下来 n 行,每行包括两个数 xi,yi 表示一个点的坐标
输入以“0 0 0”结尾

【输出数据】
对于每组数据,请输出最小要用多少稻草人,才能保证覆盖所有庄稼。若无法覆
盖或数量不够,请输出-1。

【数据约定】
对于 30%的数据,1<=n<=3000
对于 100%的数据, 1<=n<=50000,1<=数据组数<=10,其余数据均保证不会超过 int的范围

思路:

  对于任意一个庄稼 我们可以很轻松的得出能覆盖到此庄稼的的稻草人位置 即圆心位置

  令庄稼位置为(x,y)

  则稻草人的横坐标范围为[x-sqrt(r*r-y*y),x+sqrt(r*r-y*y)] 边界就是庄稼恰好在圆心上

  我们求出每个庄稼所对应的圆心范围后 题目就转化成了:

  有若干可能互相重合的线段 求最少的点数使每条线段上至少有一点

  然后按横坐标排序

  贪心 对于排序之后的线段 取最右端为最优(尽可能覆盖到多的点)

  具体见代码吧

CODE:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<algorithm>
 5 #define go(i,a,b) for(register int i=a;i<=b;i++)
 6 #define db double
 7 #define M 50000+10
 8 using namespace std;
 9 int read()
10 {
11     int x=0,y=1;char c=getchar();
12     while(c<'0'||c>'9') {if(c=='-') y=-1;c=getchar();}
13     while(c>='0'&&c<='9') {x=(x<<1)+(x<<3)+c-'0';c=getchar();}
14     return x*y;
15 }
16 int n,r,m,x,y,ans;
17 bool fg;
18 struct node {db l,r;}a[M];
19 bool cmp(node u,node v){if(u.l!=v.l) return u.l<v.l;return u.r<v.r;}
20 int main()
21 {
22     freopen("1.in","r",stdin);
23     freopen("1.out","w",stdout);
24     while(1)
25     {
26         n=read();r=read();m=read();ans=1;fg=0;
27         if(!n&&!r&&!m) return 0;
28         go(i,1,n)
29         {
30             x=read();y=read();
31             if(y>r||fg) {fg=1;continue ;}
32             db k=(db)sqrt(r*r-y*y);
33             a[i].l=(db)x-k;
34             a[i].r=(db)x+k;
35         }
36         if(fg) {puts("-1");continue ;}
37         sort(a+1,a+n+1,cmp);
38         db nw=a[1].r;
39         go(i,2,n)
40         {
41             if(a[i].l>nw) {ans++;nw=a[i].r;}
42             else nw=min(nw,a[i].r);
43         }
44         if(ans>m) {puts("-1");continue ;}
45         printf("%d\n",ans);
46     }
47     return 0;
48 }

View Code

转载于:https://www.cnblogs.com/forward777/p/10338294.html

llg的农场(farm)相关推荐

  1. java设计模式之—OO面向对象思维 Object Oriented(农场一头小母牛,每年生头小母牛,母牛5岁产母牛,20年上多少牛?)

    题目:农场一头小母牛,每年生头小母牛,母牛5岁产母牛,20年上多少牛? 目的:1.考验初学者面向对象设计理念.2.考验初学者的逻辑思维能力以及计算能力. 注:不考虑其他现实中的逻辑,比如没有公牛怎么生 ...

  2. 关于Java“回调”的详细理解及使用

    本文由"言念小文"原创,转载请说明文章出处 一.前言 接触java快六年了,从事软件开发工作也三年多了.感谢那些知名或不知名的大神一篇篇精彩博文,帮助我 从一个开发小白一步步成长为 ...

  3. linux测试网页装载时间,如何用Flood测试Web服务器响应时间

    当你设置好服务器投入使用后,你最关心的事莫过于服务器的性能了.你可以用一些手动的方法进行测试,但手动方法有很多局限性. 先不论手工测试方法所投入的时间和精力问题,用手工方法测试的一大不足就是它不容易揭 ...

  4. bat文件设置dns服务器,.bat文件设置IP、DNS

    这几天遇到个烦心事,每次开机之后都要去手动去设置一下IP地址,一大串的数字还是有点麻烦,于是就想写个批处理文件设置IP 注意:在DOS下设置IP时需要管理员权限运行 1.查看机子设置IP需要用到的名字 ...

  5. 基于回调的观察者模式

    文章目录 回调机制的简单的理解: 比较经典的回调方式: 示例 基于监听的事件处理 回调的简单理解 同步回调 异步回调函数 Java回调机制进阶 回调进阶(基于回调的"观察者"模式的 ...

  6. Python学习日记--对付爱看电视的女儿

    神兽回家了不好对付,刚接触Python也写不出什么复杂的程序,不过对付你个小丫头应该够了. 于是就写了这个个小程序: 想看电视,先闯关吧: 二年级的期末考试,最弱的科目是数学和英语,于是决定每天让她复 ...

  7. Unity创建超写实三维场景的一般步骤

    使用Unity创建三维场景最容易想到的是手动在地形上刷草.刷树等,但是这种方法不仅工作量大,但不真实.最近学习了Gaia插件,发现Gaia用程序自动生成的,感觉这种思想太妙了,World Creato ...

  8. NOIP2014-7-7模拟赛

    1.无线通讯网(wireless.pas/cpp/c) [题目描述] 国防部计划用无线网络连接若干个边防哨所.2种不同的通讯技术用来搭建无线网络:每个边防哨所都要配备无线电收发器:有一些哨所还可以增配 ...

  9. 一道并查集的(坑)题:关闭农场closing the farm

    题目描述 in English: Farmer John and his cows are planning to leave town for a long vacation, and so FJ ...

  10. 洛谷 P2919 [USACO08NOV]守护农场Guarding the Farm

    题目描述 The farm has many hills upon which Farmer John would like to place guards to ensure the safety ...

最新文章

  1. SAP Spartacus layout设计原理
  2. 调试某游戏副本中的加亮提示信息思路
  3. 《大道至简》阅读笔记
  4. python中的对象_Python中的变量、对象
  5. C# windows身份验证的连接字符串!
  6. 涉嫌抄袭!致歉,抖音Semi Design承认参考阿里Ant Design
  7. 常用电阻阻值表怎么定的?
  8. 22.Consent 确认逻辑实现
  9. VB问题——ByRef参数类型不符
  10. 枚举型、注释(待补充)
  11. 国内小程序生态服务平台即速应用完成5000万元A+轮融资...
  12. java实现缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等
  13. 二、zookeeper客户端使用和集群特性
  14. 关于 I/O 的五分钟法则
  15. mysql 数据库里查询语句中不等于的两种写法
  16. Bugku:简单套娃
  17. 内网渗透(十三)之内网信息收集-收集域环境中的基本信息
  18. 精心整理!锐捷交换机配置信息查看十大命令,会用不迷路
  19. mysql百万数据建索引时间_mysql百万的数据快速创建索引
  20. PHPcmsV9修改后台登陆界面地址

热门文章

  1. [leetcode] 935 Knight Dialer 骑士拨号器
  2. Unity TimeLine学习笔记
  3. QT3D场景的快速绘制
  4. 十一则:程序员冷“笑话”据说只有真正的程序员才看得懂
  5. U盘安装Windows 11正式版绕过TPM检查
  6. java学习笔记第三周(二)
  7. 2021-2025年中国服装合同制造的物流行业市场供需与战略研究报告
  8. puppet自动化部署
  9. Python爬虫实战 | (21) Scrapy+Selenium爬取新浪滚动新闻
  10. 【历史上的今天】2 月 28 日:阿帕网退役;Quintus 收购 Mustang;同步电流磁芯存储器获得专利