Mission

著名的手机网络运营商Totalphone 修建了若干基站收发台,以用于把信号网络覆盖一条新建的高速公路。因为Totalphone 的程序员总是很马虎的,所以,基站的传功功率不能独立设置,只能将所有新基站的功率设置为一个相同的值。为了让能源的消耗尽量少,公司希望知道公路中任意点到最近基站距离的最大值。

输入的第一行包括两个整数N(1<=N<=10^6)和L(1<=L<=10^9)分别表示基站收发台的数量和高速公路的长度。接下来N行,每行包含一对整数xi,yi(-10^9<=xi,yi<=10^9)描述一个基站的坐标。所有给出的点都互不相同。点按照x坐标不下降排列。如果两个点的x坐标相同,那么它们之间按照y坐标的升序排列。

高速公路是一条从(0,0) 到(L,0) 的直线线段。

Solution

先说说O(n∗log)的做法,很显然出题人是卡这种做法的。
二分答案,然后O(n)扫一遍判断n个圆是否覆盖了高速公路。


考虑到只有两点之间中垂线与公路交点(或公路端点)才有可能贡献。
我们利用一个单调栈,维护相邻的点之间的中垂线与公路交点的横坐标单调递增,
最后扫一遍栈内元素得出答案。

如图,那么B点是没有用的,因为能够贡献的区段位于E点之前,D点之后,是空集。

Code

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#define ll long long
#define db double
using namespace std;
const char* fin="mobile.in";
const char* fout="mobile.out";
const int inf=0x7fffffff;
const int maxn=1000007;
const db eps=10e-10;
int n,m,i,j,k;
int equ(db a,db b){return fabs(a-b)<=eps?0:(a>b?1:-1);}
struct P{db x,y;P(db _x=0,db _y=0){x=_x;y=_y;}P operator +(P b){return P(x+b.x,y+b.y);}P operator -(P b){return P(x-b.x,y-b.y);}P operator *(db b){return P(x*b,y*b);}db operator ^(P b){return x*b.y-y*b.x;}P per(){return P(y,-x);}
}a[maxn],b[maxn],c[maxn];
struct L{P p,v;L(){}L(P _p,P _v){p=_p;v=_v;}
}L0;/*P ict(L a,L b){return b.p+b.v*(((a.p-b.p)^a.v)/(b.v^a.v));}
P x0(P a,P b){return ict(L(P((a.x+b.x)/2,(a.y+b.y)/2),(b-a).per()),L0);}*/
P x0(P a,P b){return P((b.x*b.x+b.y*b.y-a.x*a.x-a.y*a.y)/2/(b.x-a.x),0);}
db dist(P a,P b){return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}int read(){int x=0,i=1;char ch=getchar();while (ch<'0' || ch>'9'){if (ch=='-') i=-1;ch=getchar();}while (ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();return x*i;
}
int main(){freopen(fin,"r",stdin);freopen(fout,"w",stdout);n=read();m=read();L0=L(P(0,0),P(m,0));int N=0;for (i=1;i<=n;i++){j=read();k=read();if (!N || equ(j*1.0,a[N].x)) a[++N]=P(j,k);else if (abs(k)<fabs(a[N].y)) a[N].y=k;}n=N;db l1=10e10,l2=10e10;P tmp,tmd;N=0;if (n==1){l1=dist(L0.p,a[1]);l2=dist(L0.v,a[1]);}else{b[++N]=a[1];l1=min(l1,dist(L0.p,a[1]));l2=min(l2,dist(L0.v,a[1]));b[++N]=a[2];l1=min(l1,dist(L0.p,a[2]));l2=min(l2,dist(L0.v,a[2]));c[N-1]=x0(a[1],a[2]);for (i=3;i<=n;i++){while (N>1){tmd=x0(b[N],a[i]);if (equ(c[N-1].x,tmd.x)<=0) break;N--;}c[N]=tmd;b[++N]=a[i];l1=min(l1,dist(L0.p,a[i]));l2=min(l2,dist(L0.v,a[i]));}}db ans=max(l1,l2);for (i=1;i<N;i++){if (equ(c[i].x,0.0)>=0 && equ((c[i].x),m*1.0)<=0)ans=max(ans,dist(c[i],b[i]));}printf("%.3lf\n",ans);return 0;
}

Warning

1.卡常
1)求交时请一步得解,不要用什么向量求交。
2)读入优化。

转载于:https://www.cnblogs.com/hiweibolu/p/6714781.html

【JZOJ3636】【BOI2012】Mobile(mobile)相关推荐

  1. 1983. 【普及组模拟赛】手机(mobile)

    1983. [普及组模拟赛]手机(mobile) 题目描述 一般的手机的键盘是这样的: 要按出英文字母就必须要按数字键多下.例如要按出 x 就得按 9 两下,第一下会出 w,而第二下会把 w 变成 x ...

  2. 【论文翻译】HEMET: A Homomorphic-Encryption-Friendly Privacy-Preserving Mobile Neural Network Architecture

    [原文链接]HEMET: A Homomorphic-Encryption-Friendly Privacy-Preserving Mobile Neural Network Architecture ...

  3. HighNewTech:2019.08.09程序猿界大事件之【你好,我是鸿蒙OS】~【来了,老弟】—技术才是硬道理,开源方能建立新生态!

    High&NewTech:2019.08.09程序猿界大事件之[你好,我是鸿蒙OS]~[来了,老弟]-技术才是硬道理,开源方能建立新生态! 导读       2019华为开发者大会在今日举行, ...

  4. 【每周CV论文推荐】 初学高效率CNN模型设计应该读的文章

    欢迎来到<每周CV论文推荐>.在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题的. 高效率(紧凑)的CNN模型设计是深度学习在工 ...

  5. 【page-monitor 前端自动化 上篇】初步调研

    转载文章:来源(靠谱崔小拽) 前端自动化测试主要在于:变化快,不稳定,兼容性复杂:故而,想通过较低的成本维护较为通用的自动化case比较困难.本文旨在通过page-monitor获取和分析dom结构, ...

  6. 【知识小课堂】 mongodb 之字段中的【 数组】、【内嵌文档】

    一.介绍 MONGODB 的表结构 很灵活 .主要还是因为 字段中可以包含 [ 数组].[内嵌文档]. 现在简单介绍一下 字段中的[ 数组].[内嵌文档]相关的一些操作 (为了方便理解,还是以表来理解 ...

  7. 基于matlab的语音信号,科学网—[转载]【信息技术】【2014.06】【含源码】基于MATLAB的语音信号处理与分析 - 刘春静的博文...

    本文为瑞典耶夫勒大学(作者:Nan Wu)的学士论文,共48页. 语音传递是人类最重要.最有效.最常用的信息交流方式.语言是人类特有的特征,而人声是常用的工具,也是相互传递信息的重要途径.语音具有较大 ...

  8. 【市场调研与分析】Intel发力移动安全领域——By Me at 20140613

                                                    [市场调研与分析]Intel发力移动安全领域                               ...

  9. 【HTML5CSS3进阶学习01】气泡组件的实现

    前言 气泡组件在实际工作中非常普遍,无论是网页中还是app中,比如: 我们这里所谓气泡组件是指列表型气泡组件,这里就其dom实现,css实现,js实现做一个讨论,最后对一些细节点做一些说明,希望对各位 ...

  10. 【微信小程序系列】微信小程序超简单教程,基本语法,获取用户基本数据信息,实现对云数据库的增删改查及小程序外部api的引用示例(附源码)

    [微信小程序系列]微信小程序超简单教程 小程序项目结构 静态页面的构成 HTML:结构 css:样式 js:行为 小程序 页面全部存放在pages, 而且pages目录只能存放页面 页面包括4个文件, ...

最新文章

  1. 如何提升网站的信任度,助力网站获取高排名?
  2. hdu5246超级赛亚ACMer
  3. 双机调试和windbg的命令
  4. 记一次小程序富文本的小小优化
  5. html5标签的兼容性处理
  6. linux13位时间戳,Kotlin 处理Linux时间戳
  7. Online Judge系统常见返回信息分析
  8. TOCControl 的HitTest()方法
  9. JSOI 2008 【魔兽地图】
  10. ​老男孩教育每日一题-第73天 -基础命令点:可恶的^C
  11. drools视频教程(drool实战实例+数据库+视频讲解)
  12. c语言的单片机delay延时函数详解
  13. python统计元音字母个数_Quzh[python]统计元音字母——输入一个字符串,统计处其中元音字母的数量。...
  14. 计算机驱动器程序,打开计算机CD驱动器的位置
  15. 程序员才是真正的段子手
  16. Android中的封装流式布局FlowLayout
  17. Navicat Premium 15导入excel表格
  18. 有机无脂牛奶的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  19. omi html转义,特殊字符读法
  20. 怒揭黑莓市场黑幕,还消费者公道

热门文章

  1. 汇编OFFSET,SEG,LEA
  2. java自定义异常怎么做
  3. linux驱动开发书籍(待续)
  4. Nand Flash基础知识与坏块管理机制的研究
  5. linux内核printk调试
  6. react 拖拽连接插件_一款精美的 react 后台管理系统
  7. (原创)Android6.0亮屏流程分析
  8. Example: Communication between Activity and Service using Messaging
  9. 燕京理工学院java期末_英华学堂燕京理工学院的答案
  10. 2021.12.20用ULN2003驱动四线步进电机