博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LOJ #2159. 「POI2011 R1」Plot
阅读量:5076 次
发布时间:2019-06-12

本文共 1494 字,大约阅读时间需要 4 分钟。

好难写啊!

这题如果保证数据随机,那么可以直接跑一个最小圆覆盖,先二分半径,再贪心覆盖。

但是出题人显然不会这么善良。
于是就可以倍增,\(1,2,4,8,16...\),这样尝试长度,找到最大可行二进制长度(即最高位)后,再逐位确定。
复杂度\(O(nlog^2(n))\)
但是写完之后又被卡了精度,改随机数种子才可以过。

#include 
using namespace std;const int N=100010;typedef double ld;const ld EPS=1e-8;struct point{ ld x,y; ld distance(){ return sqrt(x*x+y*y); } point operator *(const ld &z) const{ return {z*x,z*y}; } point operator /(const ld &z) const{ return {x/z,y/z}; } ld operator ^(const point &_) const{ return x*_.x+y*_.y; } ld operator *(const point &_) const{ return x*_.y-y*_.x; } point operator +(const point &_) const{ return {x+_.x,y+_.y}; } ld sqr() const{ return x*x+y*y; } point operator -(const point &_) const{ return {x-_.x,y-_.y}; } point rotate(const ld &alpha) const{ ld tc=cos(alpha),ts=sin(alpha); return {x*tc-y*ts,x*ts+y*tc}; } point normal() const{ return {-y,x}; }}a[N],c[N];struct line{ point x,y; point generate(const ld &c) const{ return x+y*c; } point cross(const line &u) const{ ld s1=y*u.y; ld s2=u.y*(x-u.x); //cerr<
<<" "<
<<" "<
<<" "<
<
mid*mid) break; for (int j=(i>>=1); j; j>>=1) if (x+i+j-1<=n&&check(x,x+i+j-1)<=mid*mid) i+=j; if (rec){ re=1; check(x,x+i-1); re=0; } return x+i;}bool maybe(const ld &mid){ //cerr<<"maybe:"<
<

转载于:https://www.cnblogs.com/Yuhuger/p/10200215.html

你可能感兴趣的文章
asp.net mvc源码分析-ModelValidatorProviders
查看>>
【Mac系统】istatmenus6.20下载以及激活
查看>>
repeter选中行变色
查看>>
Python_15函数
查看>>
获取到某一方法的调用者的类名、方法名、命名空间(转)
查看>>
Vector与ArrayList的分析
查看>>
【BZOJ-4310】跳蚤 后缀数组 + ST表 + 二分
查看>>
JS操作
查看>>
湫湫系列故事——消灭兔子
查看>>
写段代码沉淀一下
查看>>
SQL Server与Oracle对表添加列的不同点
查看>>
nginx高性能WEB服务器系列之三版本升级
查看>>
jmeter+ant+jenkins构建自动化测试
查看>>
VMware安装Centos7超详细教程
查看>>
Mercurial(Hg)基本操作
查看>>
Oracle Rac 测试
查看>>
核心编程(第十章)嵌套函数,装饰器
查看>>
正则表达式学习下(转的呀不过刚用呢就收藏了)
查看>>
【原】关于定时回查出现的BUG有感
查看>>
BBC英语-like的用法
查看>>