bzoj 1020 计算几何

南京银行信息技术岗提前批笔试与面试 1、笔试 笔试大致可以分为三部分:性格测试、行测题目、专业知识 性格测试 性格测试一般会有较多的体量,可能一共大概有一百多道接近两百道的样子,这个是不限时的。 前面有100道是这样的题目,就是有四个选项都是各种形容词,然后分别选出最符合自己的与最不符合自己的选项。这种题你就顺着自己的潜意识填就行了,但是前后要一致,我怀疑他出这么多题,可能就是考一考你记不记得前面填了啥。比如你做到第90题的时候,可能会出现和前面第2题类似的四个形容词,更有甚者就是一模一样的,你要对自己之前选的什么有个比较清楚的记忆。 阅读详情

题意:一堆多边形,一个折线。求折线上的点离多边形最远距离。

听说莫涛的论文写了这道题?

先把折线中所有的线段用多边形截,把不在多边形内的线段塞到一个队列里。
遍历队列,对于一个线段求出左端点到多边形的最近点p1,右端点到多边形的最近点p2。

分别用左右端点到p1,p2的距离更新答案。在线段上二分一个点p使dis(p,p1)=dis(p,p2)。
如果dis(p,p1)>ans那么把当前线段从p分成两段塞回队列。

并不会证明,但是这玩意跑得飞快。

#include <bits/stdc++.h>
using namespace std;
#define ppi pair<poi,int> 
#define eps 1e-9
#define inf 1e9
int c,n,cnt;
double ans;
const double e=exp(1),pi=acos(-1);
int dcmp(double x)
{
    if(x<-eps)return -1;
    if(x>eps)return 1;
    return 0;
}
struct poi
{
    double x,y;
    poi(){}
    poi(double x,double y):x(x),y(y){}
    friend bool operator < (const poi &p1,const poi &p2)
    {
        if(!dcmp(p1.x-p2.x))return p1.y<p2.y;
        return p1.x<p2.x;
    }
    void read(){scanf("%lf%lf",&x,&y);}
    friend poi operator - (const poi &p1,const poi &p2)
    {return poi(p1.x-p2.x,p1.y-p2.y);};
    friend poi operator + (const poi &p1,const poi &p2)
    {return poi(p1.x+p2.x,p1.y+p2.y);};
    friend double operator * (const poi &p1,const poi &p2)
    {return p1.x*p2.x+p1.y*p2.y;};
    friend double operator ^ (const poi &p1,const poi &p2)
    {return p1.x*p2.y-p2.x*p1.y;};
    friend poi operator * (double x,const poi &p1)
    {return poi(p1.x*x,p1.y*x);};
}v[2100];
double dis(poi p1,poi p2)
{return (p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y);}
struct line
{
    poi p1,p2,v;
    line(){}
    line(poi p1,poi p2):p1(p1),p2(p2){v=p1-p2;}
    poi mid(){return poi((p1.x+p2.x)/2,(p1.y+p2.y)/2);}
}a[51];
queue<line>que;
int online(line l1,poi p1)
{return dcmp((p1-l1.p1)*(p1-l1.p2))<=0;}
ppi intersect(line l1,line l2)
{
    l1.v=l1.p1-l1.p2;
    l2.v=l2.p1-l2.p2;
    poi u=l1.p1-l2.p1;
    double tmp=(u^l2.v)/(l2.v^l1.v);
    poi p=l1.p1+tmp*l1.v;
    return make_pair(p,online(l1,p)&&online(l2,p));
}
struct poly
{
    int m;
    poi p[51];
    line l[51];
    void read()
    {
        scanf("%d",&m);
        for(int i=1;i<=m;i++)p[i].read();
        p[m+1]=p[1];
        for(int i=1;i<=m;i++)l[i]=line(p[i],p[i+1]);
    }
    void cal(line l1)
    {
        for(int i=1;i<=m;i++)
        {   
            ppi p1=intersect(l[i],l1);
            if(p1.second)v[++cnt]=p1.first;
        }
    }
    int in(poi p1)
    {
        int cnt=0;
        line l1=line(p1,poi(p1.x+e*inf,p1.y+pi*inf));
        for(int i=1;i<=m;i++)
            cnt+=intersect(l1,l[i]).second;
        return cnt&1;
    }
    poi get(poi p1)
    {
        poi ret=poi(inf,inf);
        for(int i=1;i<=m;i++)
        {
            ret=dis(ret,p1)<dis(l[i].p1,p1) ? ret:l[i].p1;
            ret=dis(ret,p1)<dis(l[i].p2,p1) ? ret:l[i].p2;
            poi p2=poi(p1.x-l[i].p2.y+l[i].p1.y,p1.y+l[i].p2.x-l[i].p1.x);
            ppi p=intersect(l[i],line(p1,p2));
            if(online(l[i],p.first))
                ret=dis(ret,p1)<dis(p.first,p1) ? ret:p.first;
        }
        return ret;
    }
}b[51];
int main()
{
    //freopen("tt.in","r",stdin);
    scanf("%d%d",&c,&n);
    for(int i=1;i<n;i++)a[i].p1.read();
    a[n-1].p2.read();
    for(int i=1;i<n-1;i++)a[i].p2=a[i+1].p1;
    for(int i=1;i<=c;i++)b[i].read();
    for(int i=1;i<n;i++)
    {
        v[cnt=1]=a[i].p1;
        for(int j=1;j<=c;j++)
            b[j].cal(a[i]);
        v[++cnt]=a[i].p2;
        sort(v+1,v+1+cnt);
        for(int j=1;j<cnt;j++)
            if(dcmp(dis(v[j],v[j+1]))>0)
            {
                int flag=0;
                for(int k=1;k<=c;k++)
                    if(b[k].in(line(v[j],v[j+1]).mid()))
                        {flag=1;break;} 
                if(!flag)que.push(line(v[j],v[j+1]));
            }
    }
    while(!que.empty())
    {
        line l1=que.front();
        que.pop();
        poi p1=poi(inf,inf),p2=p1;
        for(int i=1;i<=c;i++)
        {   
            poi p=b[i].get(l1.p1);
            p1=dis(p1,l1.p1)<dis(p,l1.p1) ? p1:p;
            p=b[i].get(l1.p2);
            p2=dis(p2,l1.p2)<dis(p,l1.p2) ? p2:p;   
        }
        ans=max(ans,sqrt(dis(p1,l1.p1)));
        ans=max(ans,sqrt(dis(p2,l1.p2)));
        poi l=l1.p1,r=l1.p2;
        while(dcmp(dis(l,r))>0)
        {
            poi mid=line(l,r).mid();
            if(dis(mid,p1)<dis(mid,p2))l=mid;
            else r=mid;
        }
        if(sqrt(dis(l,p1))>ans+0.001)
        {
            que.push(line(l,l1.p1));
            que.push(line(l,l1.p2));
        }
    }
    printf("%.2lf\n",ans);
    return 0;
}

[南大ICS-PA2] 字符串处理函数和printf实现 [南大ICS-PA2] 程序、运行时环境与AM 字符串处理函数和printf实现 阅读详情

相关推荐

Jenkins离线安装保姆级教程:从下载.war包到SVN+Maven项目一键部署(附避坑脚本)

本文详细介绍了Jenkins离线安装的全流程,包括.war包下载、SVN+Maven项目配置及自动化部署。特别针对内网环境提供解决方案,涵盖插件管理、开发工具链配置、构建触发器和SSH部署等关键步骤,帮助企业在网络隔离环境下实现高效持续集成。

weixin_30096975的博客 374

【BZOJ】4727:[POI2017]Turysta-竞赛图&哈密顿回路

题解 一道好题。 根据竞赛图性质可得,我们一定能在图中找到哈密顿路径,然后再利用竞赛图性质寻找强连通分量,并不断扩展环的大小。(这一步参见神犇博客:哈密顿问题)。 我们根据推断出,每个scc(强连通分量)之间的连边必然是单向的(均为从某一scc的出边和另一scc的入边)。我们拓扑排序一下,对于每个点,先把它所在scc加入,再不断按拓扑序由大到小加入,就是答案了。 代码 #in...

远行客 591

DSP(数字信号处理器)技术概要

数字信号处理器(digital signal processor,DSP)是一种用于数字信号处理的可编程微处理器,它的诞生与快速发展,使各种数字信号处理算送得以实时实现,为数字信号处理的研究和应用打开了新局面,提供了低成本的实际工作环境和应用平台,推动了新的理论和应用领域的发展。目前,DSP技术在通信、航空、航天。雷达、工业控制、医疗、网络及家用电器等各个领域都得到了广泛应用。 1.1 DSP系统和芯片的结构特点1.1.1 DSP系统的基本结构通过传感数将非电物理量转换为模拟电信号,预处理一般包括放大器和滤

m0_46582485的博客 2万+

BZOJ 4727: [POI2017]Turysta

4727: [POI2017]Turysta Time Limit:20 SecMemory Limit:128 MBSecSpecial JudgeSubmit:117Solved:39[Submit][Status][Discuss] Description 给出一个n个点的有向图,任意两个点之间有且仅一条有向边。对于每个点v,求出从v出发的一条经过...

weixin_30391339的博客 144

IDEA 2023最新破解教程:从安装到永久激活(附常见问题解决方案)

本文为Java开发者提供了一份详尽的IntelliJ IDEA 2023高效使用指南。内容涵盖从版本选择、安装配置到核心快捷键、项目依赖管理、高级调试测试以及插件生态的深度优化。旨在帮助用户在合法合规的前提下,充分发挥这款顶级IDE的潜力,显著提升Java开发效率与工作体验。

time3的博客 3369

PCIe Gen4眼图测试实战:如何用示波器快速定位信号完整性问题(附避坑指南)

本文详细解析了PCIe Gen4眼图测试中的信号完整性诊断方法,通过示波器操作技巧和实战案例,帮助工程师快速定位抖动、反射等信号问题。特别针对眼图闭合、阻抗失配等常见问题提供了避坑指南和解决方案,提升高速信号调试效率。

weixin_29230773的博客 372

竞赛图(有向完全图)上哈密顿路径的若干性质(BZOJ4727 [POI2017]Turysta 题解)

一.竞赛图与哈密顿路径的定义. 竞赛图:竞赛图是一张有向无环图G={V,E}G=\{V,E\}G={V,E},满足有∣E∣=∣V∣(∣V∣−1)|E|=|V|(|V|-1)∣E∣=∣V∣(∣V∣−1)边且两点之间仅有一条边,也就是说两点之间有且仅有一条边. 哈密顿路径:一条经过nnn个点的简单路径,即不能重复经过一个点. 哈密顿回路:一条哈密顿回路相当于一条哈密顿路径的终点与起点也通过一条边连起来...

hzk_cpp的博客 5728

华东师范大学2020机试题解

1.统计卡牌的值 #include<iostream> #include<string> #include<vector> //#include<algorithm> using namespace std; int main() { int n; cin>>n; int answer=0; for(int i=0;i<n;++i) { string str; ci

qq_42254342的博客 1901

BZOJ4727 [POI2017]Turysta

标签:竞赛图,哈密顿回路,DP 题目 题目传送门 Description 给出一个n个点的有向图,任意两个点之间有且仅一条有向边。 对于每个点v,求出从v出发的一条经过点数最多,且没有重复经过同一个点两次及两次以上的简单路径。 Input 第一行包含一个正整数n(2&lt;=n&lt;=2000),表示点数。 接下来n-1行,其中的第i行有i-1个数 如果第j个数是1...

Welcome to yjjr's blog! 300

Palantir解密:“本体”的建模逻辑及其扩展方向

上一篇重点从对现实世界建模的角度探讨了“本体”在数字化架构中的核心意义。这里借Palantir的“本体”概念、解析Palantir只是起点,目标旨在以他山之石攻玉——探索数字世界的底层架构逻辑,最终为构建自主体系提供思考。Palantir以“本体论”为核心的建模方案是否代表终极答案,不宜过早下结论,但其思路值得深入剖析。

SZSDQJC的博客 2635

码农新宠大对决:GitHub Copilot、通义灵码和CodeLlama谁主沉浮?

本文对三款主流AI编程工具GitHub Copilot、通义灵码和CodeLlama进行了全面对比分析。GitHub Copilot在多语言支持和代码质量上表现突出;通义灵码在中文理解和阿里云生态集成方面优势明显;CodeLlama则以开源可定制见长。文章从代码生成、理解能力、多语言支持、使用体验等维度展开评测,并结合实际案例说明不同开发者群体的适用选择。建议新手可优先考虑通义灵码,经验开发者适合GitHub Copilot,而有定制需求的企业团队则可选择CodeLlama。随着AI技术发展,这些工具将持续

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 675

BZOJ 4727: [POI2017]Turysta 竞赛图构造哈密顿回路

title BZOJ 4727 Description 给出一个n个点的有向图,任意两个点之间有且仅一条有向边。 对于每个点v,求出从v出发的一条经过点数最多,且没有重复经过同一个点两次及两次以上的简单路径。 Input 第一行包含一个正整数n(2<=n<=2000),表示点数。 接下来n-1行,其中的第i行有i-1个数 如果第j个数是1,那么表示有向边j->i+...

dilu0653的博客 381

MuJoCo 入门教程(一)

在 MuJoCo 仿真中输入自定义数字有三种方法。首先,可在 XML 中定义全局数字字段。它们有一个名称和一个实数值数组。其次,可以通过特定元素的自定义数组来扩展某些模型元素的定义。具体方法是在 XML 元素大小中设置 nuser_XXX 属性。第三,数组 mjData.userdata 不用于任何 MuJoCo 计算。用户可以在这里存储自定义计算的结果;请记住,所有随时间变化的内容都应存储在 mjData 中,而不是 mjModel 中。自定义文本字段可以保存在模型中。

机器人控制与仿真应用 1万+

bzoj 1020 安全的航线|计算几何

一道计算几何的神题,复(xue)习了各种计算几何的基础知识先上题解将航线上的每一段线段加入循环队列对于每一个线段l,r,求出到l最近的点p1和到r最近的点p2.在线段l,r内找出和p1,p2长度相等的点p,设所有陆地与p的最近点为p3,那么线段[l,p]和[p,r]的答案不会超过max(len(l,p1),len(p,p3),len(r,p2)),也就是如果这个值小于当前答案的话,线段上任意一点不

heheda_is_an_OIer的博客 742

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

[bzoj1020][SHOI2008]安全的航线flight【迭代】【计算几何】

【题目链接】   http://www.lydsy.com/JudgeOnline/problem.php?id=1020 【题解】   首先有一个朴素的想法就是二分,然后判断带圆弧的多边形是否能完全覆盖直线,是不是很简单?   但我不会 QAQ   考虑暴力枚举每一个点(隔0.005),求出它到最近陆地的距离,取最大值...

dizhengyue1902的博客 216

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

BZOJ_1020_[SHOI2008]_安全的航线flight_(计算几何+二分)

描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1020 给出一条航线(折线),给出\(c\)个陆地(多边形).求航线上距离陆地的最近距离最远的距离. 分析 也是一道神题... 1 #include <bits/stdc++.h> 2 using namespace std;...

aquz77529的博客 191

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

题目记录

bzoj4561 本来是在做计算几何的,莫名其妙来到了这道题,看了题解之后感觉挺有意思的。 我们用扫描线+平衡树,扫到圆的左端时插入两个点,分别表示圆的上弧和下弧,扫到右端点的时候删除他们。由于圆不相交,所以圆弧的相对位置不会改变,所以平衡树的形态也不会改变。并且可以通过圆的解析式轻松求出当前横坐标下每个圆弧所对应的纵坐标。那么就可以很轻松的完成插入和删除操作。 答案是什么呢?我们只需要对于...

weixin_30567471的博客 105

【BZOJ 1020】 [SHOI2008]安全的航线flight

计算几何之迭代法~

Regina8023 2027

BZOJ 1020 [SHOI2008]安全的航线flight

1020: [SHOI2008]安全的航线flight Time Limit:1 SecMemory Limit:162 MBSubmit:847Solved:286[Submit][Status][Discuss] Description 在设计航线的时候,安全是一个很重要的问题。首先,最重要的是应采取一切措施确保飞行不会发生任何事故,但同时也需要做好最坏的打算,一...

weixin_30352191的博客 148

BZOJ1011-1020

bzoj杂题 高斯消元

Gvolv 589

挖坑贴——4月结束前要做的题目们

话说蒟蒻你倒是,学学zky的挖坑方式啊我去。。。 这个。。。挖坑贴。。。已经快过去半年了/emoji BZOJ2752 [HAOI2012]高速公路(road) --线段树,操作太烦了的说。。。 BZOJ1020 [SHOI2008]安全的航线flight --二逼计算几何T T BZOJ1013 [JSOI2008]球形空间产生器sphere --貌似是高斯消元? BZOJ103...

weixin_30593261的博客 116

BZOJ 1020 安全的航线flight

Description 在设计航线的时候,安全是一个很重要的问题。首先,最重要的是应采取一切措施确保飞行不会发生任何事故,但同时也需要做好最坏的打算,一旦事故发生,就要确保乘客有尽量高的生还几率。当飞机迫降到海上的时候,最近的陆地就是一个关键的因素。航线中最危险的地方就是距离最近的陆地最远的地方,我们称这种点为这条航线“孤地点”。孤地点到最近陆地的距离被称为“孤地距离”。作为航空公...

weixin_30387423的博客 212

BZOJ 1020——[SHOI2008]安全的航线flight

Description 在设计航线的时候,安全是一个很重要的问题。首先,最重要的是应采取一切措施确保飞行不会发生任何事故,但同时也需要做好最坏的打算,一旦事故发生,就要确保乘客有尽量高的生还几率。当飞机迫降到海上的时候,最近的陆地就是一个关键的因素。航线中最危险的地方就是距离最近的陆地最远的地方,我们称这种点为这条航线“孤地点”。孤地点到最近陆地的距离被称为“孤地距离”。作为航空公司的高级顾...

weixin_30510153的博客 166

bzoj题解

在大神基础上细化 1000:A+B 1001:平面图最小割,转对偶图最短路 1002:矩阵树定理,也可以通过推矩阵的递推关系得到递推式 1003:最短路+DP 1004:burnside定理 1005:prufer数列+组合数学+高精度 1006:最大势算法,简单弦图染色 1007:半平面交 1008:组合数学,需要高精 1009:kmp+矩阵加速 1010:斜率优

fighting 2557

怒刷BZOJ记录(一)1001~1037

我实在是太弱了。。。不滚粗只能刷BZOJ了。。。这里来记录每天刷了什么题吧。 2015-7-9 :   1001[BeiJing2006]狼抓兔子 | 最大流练习(呃。。其实是平面图最大流辣)   1002[FJOI2007]轮状病毒 | 基尔霍夫矩阵算生成树数量(呃。。其实是DP辣) 2015-7-10:   10...

weixin_30763397的博客 122
上一篇: codeforces #366 704B 704C 704D 704E
下一篇: bzoj 1021 dp
make_it_for_good
博客等级 码龄11年 13粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值