洛谷P2333 [SCOI2006]一孔之见
辣鸡题目毁我人生败我前程
50分代码
//Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
#define pi acos(-1)
#define eps 1e-9
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
const int N=;
typedef long long LL;
typedef double db;
using namespace std;
int n,cnt[N];
db S; template<typename T>void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} struct pt {
db x,y;
pt(){}
pt(db x,db y):x(x),y(y){}
}p[N],jd[N][]; struct Line {
pt a,b;
Line(){}
Line(pt a,pt b):a(a),b(b){}
}L[N]; int dcmp(db x) { return fabs(x)<=eps?:(x>?:-);}
bool operator == (const pt&A,const pt&B) { return dcmp(A.x-B.x)==&&dcmp(A.y-B.y)==; }
bool operator < (const pt&A,const pt&B) { return dcmp(A.x-B.x)<||(dcmp(A.x-B.x)==&&dcmp(A.y-B.y)<); }
pt operator * (const pt&A,const db&B) { return pt(B*A.x,B*A.y); }
pt operator / (const pt&A,const db&B) { return pt(A.x/B,A.y/B); }
pt operator + (const pt&A,const pt&B) { return pt(A.x+B.x,A.y+B.y); }
pt operator - (const pt&A,const pt&B) { return pt(A.x-B.x,A.y-B.y); }
db cross(pt A,pt B) { return A.x*B.y-A.y*B.x; }
db dot(pt A,pt B) { return A.x*B.x+A.y*B.y; }
db length(pt A) { return dot(A,A); }
db pf(db x) { return x*x; } int ck(pt A,Line li) {
return dcmp(sqrt(length(A-li.a))+sqrt(length(A-li.b))-sqrt(length(li.a-li.b)))==;
} void get_jd(int id,Line li,db r) {
cnt[id]=;
db a=li.a.x,b=li.a.y,c=li.b.x,d=li.b.y;
db e=pf(c-a)+pf(d-b),f=2.0*a*(c-a)+2.0*b*(d-b),g=a*a+b*b-r*r;
db dt=f*f-*e*g;
if(dcmp(dt)<) return;
if(dcmp(dt)==) cnt[id]=;
else cnt[id]=;
db t1=(-f+sqrt(dt))/e/2.0;
db t2=(-f-sqrt(dt))/e/2.0;
jd[id][]=pt(a+t1*(c-a),b+t1*(d-b));
jd[id][]=pt(a+t2*(c-a),b+t2*(d-b));
if(cnt[id]==)
if(!ck(jd[id][],li)) cnt[id]--;
if(!ck(jd[id][],li)) {
cnt[id]--;
if(cnt[id]) jd[id][]=jd[id][];
}
} int ck(db r) {
db rs=;
int jds=,f=;
For(i,,n) {
get_jd(i,L[i],r);
jds+=cnt[i];
if(cnt[i]==) f=;
}
if(jds==&&!f) {
For(i,,n) {
int pr=i==?n:i-;
if(cnt[i]==&&cnt[pr]==) {
pt A=jd[i][],B=jd[pr][],C=p[i];
db a=length(B-C),b=length(A-C),c=length(A-B);
rs=r*r*acos((a+b-c)/(2.0*sqrt(a)*sqrt(b)));
rs+=fabs(cross(A,C));
rs+=fabs(cross(B,C));
break;
}
}
return dcmp(rs-S*2.0)>=;
}
db sum=2.0*pi;
For(i,,n) {
if(cnt[i]==) {
pt A=jd[i][],B=jd[i][];
rs+=fabs(cross(A,B));
db a=length(B),b=length(A),c=length(A-B);
sum-=acos((a+b-c)/(2.0*sqrt(a)*sqrt(b)));
}
}
rs+=r*r*sum;
return dcmp(rs-S*2.0)>=;
} int main() {
#ifdef DEBUG
freopen(".in","r",stdin);
freopen(".out","w",stdout);
#endif
read(n); scanf("%lf",&S);
For(i,,n)
scanf("%lf%lf",&p[i].x,&p[i].y);
p[n+]=p[];
For(i,,n) L[i]=Line(p[i],p[i+]);
db l=,r=1e20;
while(fabs(r-l)>eps) {
db mid=((l+r)/2.0);
if(ck(mid)) r=mid;
else l=mid;
}
printf("%.2lf\n",l);
return ;
}
洛谷P2333 [SCOI2006]一孔之见的更多相关文章
- 「 洛谷 」P4539 [SCOI2006]zh_tree
小兔的话 推荐 小兔的CSDN [SCOI2006]zh_tree 题目限制 内存限制:250.00MB 时间限制:1.00s 标准输入输出 题目知识点 思维 动态规划 \(dp\) 区间\(dp\) ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
- 洛谷P1710 地铁涨价
P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交 讨论 题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...
- 洛谷P1371 NOI元丹
P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交 讨论 题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...
- 洛谷P1538迎春舞会之数字舞蹈
题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...
- 洛谷八月月赛Round1凄惨记
个人背景: 上午9:30放学,然后因为学校举办读书工程跟同学去书城选书,中午回来开始打比赛,下午又回老家,中间抽出一点时间调代码,回家已经8:50了 也许是7月月赛时“连蒙带骗”AK的太幸运然而因同学 ...
随机推荐
- 思维构造——cf1090D
/* 只要找到两个没有关系的点即可 */ #include<bits/stdc++.h> using namespace std; #define maxn 100005 long lon ...
- jenkins实现不同角色查看不同视图
1.安装插件Role-based Authorization Strategy 2.开启插件 系统管理>>>全局安全配置 3.创建角色和用户 4.登陆查看,只能看到travel开头的 ...
- 从零学React Native之13 持久化存储
数据持久化就是指应用程序将某些数据存储在手机存储空间中. 借助native存储 这种方式不言而喻,就是把内容传递给native层,通过原生API存储,详见从零学React Native之05混合开发 ...
- PAT甲级——A1112 Stucked Keyboard【20】
On a broken keyboard, some of the keys are always stucked. So when you type some sentences, the char ...
- 接着上回,导包正确之后,出现javabean.Friend cannot be cast to java.util.List,的错误。找了很久。以为是User user0作为参数,改成了String username还是错误,看了看listFriend.jsp没有错误,我想会不会是包多了,导致类型复杂。最后发现包少了一个:
import org.apache.commons.dbutils.handlers.BeanListHandler;这个包,BeanListHandler让我发现List<Friend> ...
- Java中9大内置基本数据类型Class实例和数组的Class实例
1.Java中9大内置几本数据类型: 对于对象来说,可以直接使用对象.getClass()或者Class.forName(className);.类名.class都可以获取Class实例. 但是我们的 ...
- js 禁止/允许页面滚动
参考:https://blog.csdn.net/huangfu_chunfeng/article/details/46429997 https://www.cnblogs.com/w ...
- springcloud Finchley 版本hystrix 和 hystrix Dashboard
hystrix的断路功能 引用上个项目,创建新的model ,cloud-hystrix pom.xml <?xml version="1.0" encoding=" ...
- 使用 JDK11 遇到的问题
1.下载的 JDK 解压版中没有 jre 目录以及相应的包,需要通过命令自动生成 进入 JDK 的 bin 目录下,执行以下命令,然后会在 bin 目录下生成一个 jre 目录,需要将该 jre 目录 ...
- IDA*算法——骑士精神
例题 骑士精神 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者 ...