bzoj1038(半平面交)
- #include<iostream>
- #include<cstring>
- #include<cmath>
- #include<cstdio>
- #include<algorithm>
- using namespace std;
- const int maxn=;
- const double eps=1e-;
- double ans=1e10;
- int n,head,tail;
- struct vec{
- double x,y;
- vec(double x=,double y=):x(x),y(y){}
- vec operator-(vec& a){
- return vec(x-a.x,y-a.y);
- }
- vec operator+(vec&a){
- return vec(x+a.x,y+a.y);
- }
- }po[maxn],g[maxn];
- vec operator*(vec a,double t){return vec(a.x*t,a.y*t);}
- double cross(vec a,vec b){return a.x*b.y-b.x*a.y;}
- struct lin{
- vec p,v;//p是直线上一个点,v是方向向量
- double ang;//ang是斜率;
- lin(){}
- lin(vec p,vec v):p(p),v(v){ang=atan2(v.y,v.x);}
- bool operator<(const lin&a)const{
- return ang<a.ang;
- }
- }ll[maxn],q[maxn],bb,cc;
- bool onl(lin L,vec p){
- return cross(L.v,p-L.p)>;
- }
- vec qj(lin a,lin b){
- vec u=a.p-b.p;
- double t=cross(b.v,u)/cross(a.v,b.v);
- return a.v*t+a.p;
- }
- void halfj(){
- sort(ll,ll+n);
- q[head=tail=]=ll[];
- for(int i=;i<n;++i){
- while(head<tail&&!onl(ll[i],g[tail-]))tail--;
- while(head<tail&&!onl(ll[i],g[head]))head++;
- q[++tail]=ll[i];
- if(fabs(cross(q[tail].v,q[tail-].v))<eps){
- --tail;if(onl(q[tail],ll[i].p))q[tail]=ll[i];
- }
- if(head<tail)g[tail-]=qj(q[tail-],q[tail]);
- }
- while(head<tail&&!onl(q[head],g[tail-]))--tail;
- }
- int main(){
- cin>>n;
- for(int i=;i<=n;++i){
- scanf("%lf",&po[i].x);
- }
- for(int i=;i<=n;++i){
- scanf("%lf",&po[i].y);
- }
- po[].x=po[].x;po[].y=;
- po[n+].x=po[n].x;po[n+].y=;
- for(int i=;i<=n;++i){
- ll[i]=lin(po[i],po[i+]-po[i]);
- }
- n+=;
- halfj();
- for(int k=;k<tail;++k)
- for(int i=;i<n-;++i){
- vec tmp;tmp.x=g[k].x;tmp.y=-;
- if(g[k].x>=po[i].x&&g[k].x<=po[i+].x){
- cc=lin(po[i],po[i+]-po[i]);
- bb=lin(tmp,g[k]-tmp);
- ans=min(ans,g[k].y-qj(cc,bb).y);
- }
- }
- for(int k=;k<=n-;++k)
- for(int i=;i<tail-;++i){
- vec tmp;tmp.x=po[k].x;tmp.y=-;
- if(po[k].x>=g[i].x&&po[k].x<=g[i+].x){
- cc=lin(g[i],g[i+]-g[i]);
- bb=lin(tmp,po[k]-tmp);
- ans=min(ans,qj(cc,bb).y-po[k].y);
- }
- }
- printf("%.3lf",ans);
- return ;
- }
bzoj1038(半平面交)的更多相关文章
- [BZOJ1038][ZJOI2008]瞭望塔(半平面交)
1038: [ZJOI2008]瞭望塔 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2999 Solved: 1227[Submit][Statu ...
- 【POJ 3525】Most Distant Point from the Sea(直线平移、半平面交)
按逆时针顺序给出n个点,求它们组成的多边形的最大内切圆半径. 二分这个半径,将所有直线向多边形中心平移r距离,如果半平面交不存在那么r大了,否则r小了. 平移直线就是对于向量ab,因为是逆时针的,向中 ...
- 【BZOJ-2618】凸多边形 计算几何 + 半平面交 + 增量法 + 三角剖分
2618: [Cqoi2006]凸多边形 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 959 Solved: 489[Submit][Status] ...
- 【CSU1812】三角形和矩形 【半平面交】
检验半平面交的板子. #include <stdio.h> #include <bits/stdc++.h> using namespace std; #define gg p ...
- 简单几何(半平面交+二分) LA 3890 Most Distant Point from the Sea
题目传送门 题意:凸多边形的小岛在海里,问岛上的点到海最远的距离. 分析:训练指南P279,二分答案,然后整个多边形往内部收缩,如果半平面交非空,那么这些点构成半平面,存在满足的点. /******* ...
- poj 3335(半平面交)
链接:http://poj.org/problem?id=3335 //大牛们常说的测模板题 ------------------------------------------------- ...
- poj3525Most Distant Point from the Sea(半平面交)
链接 求凸多边形内一点距离边最远. 做法:二分+半平面交判定. 二分距离,每次让每条边向内推进d,用半平面交判定一下是否有核. 本想自己写一个向内推进..仔细一看发现自己的平面交模板上自带.. #in ...
- poj1474Video Surveillance(半平面交)
链接 半平面交的模板题,判断有没有核.: 注意一下最后的核可能为一条线,面积也是为0的,但却是有的. #include<iostream> #include <stdio.h> ...
- 半平面交模板(O(n*n)&& O(n*log(n))
摘自http://blog.csdn.net/accry/article/details/6070621 首先解决问题:什么是半平面? 顾名思义,半平面就是指平面的一半,我们知道,一条直线可以将平面分 ...
随机推荐
- 解决React Native:Error: Cannot find module 'asap/raw'
本来想做个底部切换的tab的,安装完 npm i react-native-tab-navigator --save 后跑项目就报错了,如下图 和我一样报这个错的朋友们莫慌,一步就可以解决了,执行命令 ...
- vue 自定义组件销毁
今天在开发电商vue前端项目时,用户每次登出再换其它用户登录时,页面显示的用户名和左则导航都还是上个用户的,刚开始以为是localStorage中没有清除全局数据,然后在用户点击退出系统时手动清除lo ...
- linux学习笔记:linux常用的命令
2018-11-19 常见命令快速查询一览表 命令 功能 ls 列出目录内容 cat 链接文件并打印到标准输出设备上(通常用来 ...
- oracle优化(一)
非原创 1. 选用合适的ORACLE优化器 ORACLE的优化器有3种: a. RULE(基于规则)b. COST(基于成本) c. CHOOSE(选择性) 选择缺省的优化器,可以通过对init.or ...
- python相关注册登录方式
1.使用django自带功能实现登录/退出登录 使用django自带登录功能,前提生成用户(用户注册)使用的是django自带的user,或称models中用户表继承于django自带的user 1. ...
- 面试简单整理之rabbitmq
135.rabbitmq 的使用场景有哪些? 单反单收,单发多收,发布订阅,按路由发送,按主题发送 136.rabbitmq 有哪些重要的角色? Server,Consumer,Producer 13 ...
- 设计模式学习心得<装饰器模式 Decorator>
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包装 ...
- 基于TeamCity的asp.net mvc/core,Vue 持续集成与自动部署
一 Web Server(Windows)端的配置 1.配置IIS,重要的是管理服务 1.1 配置FTP(前端NPM项目需要) 该步骤略,如果是在阿里云ESC上,需要开启端口21(用来FTP认证握手) ...
- JAVA解决前端跨域问题。
什么是跨域? 通俗来说,跨域按照我自己的想法来理解,是不同的域名之间的访问,就是跨域.不同浏览器,在对js文件进行解析是不同的,浏览器会默认阻止,所以 现在我来说下用java代码解决前端跨域问题. 用 ...
- 实验十四 第九组 张燕~杨蓉庆~杨玲 Swing图形界面组件
实验十四 Swing图形界面组件 8-11-29 理论知识 Swing和MVC设计模式 (1)设计模式(Design pattern)是设计者一种流行的 思考设计问题的方法,是一套被反复使用,多数人 ...