ZJOI 2008 瞭望塔 半平面交

从零到一:Quartus II连接开发板实战,打通绘图、管脚分配、编译与下载全链路 本文详细介绍了使用Quartus II软件连接FPGA开发板并完成首个项目的全流程。从硬件连接到驱动安装,到绘制电路框图、精准分配管脚,再到编译设置与最终下载,手把手指导您打通从设计到硬件实现的完整链路,是FPGA初学者的实战入门指南。 阅读详情

题意:

给出一个以n个点为轮廓的村庄,在村庄任意位置放一个瞭望塔,使瞭望塔能看到村庄的所有位置,求瞭望塔最低高度。


思路:

考虑轮廓的每一条边,要看到这条边就必须在这条边以上的一个半平面内,因此求半平面交即可,样例图:



不妨将半平面交与地面上的直线看成分段函数,分别为f(x)与g(x),则所求即为h(x) = f(x) - g(x)的最小值,由于f(x)与g(x)均为一次分段函数,故h(x)也是一次分段函数,其最值仅可能在每一段的端点处取到。


注意:

1)输入的坐标为整数,注意转为double

2)叉积代表有向面积,写的时候要想清楚方向


由于是第一次写半平面交,根据老人家的模板写的,其实由于本题的特殊性可以写得更简单(例如直线可用斜截式),但这样的写法更具一般性,代码:

#include <cstdio>
#include <algorithm>
#include <cmath>

#define For(i,j,k) for(int i = j;i <= k;i++)
#define dcmp(x) (x > eps ? 1 : (x < -eps ? -1 : 0))

using namespace std;

const int N = 310;
const double eps = 1e-8;

struct Point{
    double x, y;

    Point(){}
    Point(double X, double Y):x(X), y(Y){}
    bool operator < (const Point& A) const{
        return x < A.x;
    }

};

typedef Point Vector;

Vector operator - (const Point &A, const Point &B){return Vector(A.x - B.x, A.y - B.y);}
Point operator + (const Point &A, const Vector &V){return Point(A.x + V.x, A.y + V.y);}
Vector operator * (const Vector &V, double k){return Vector(V.x * k, V.y * k);}
double Cross(const Vector &A, const Vector &B){return A.x * B.y - A.y * B.x;}

struct Line{
    Point P;
    Vector v;
    double ang;

    Line(){}
    Line(const Point& A, const Point& B){
        v = B - A;
        P = A;
        ang = atan2(v.y, v.x);
    }

    bool operator <(const Line& A) const{
        return ang < A.ang;
    }
};

Point Intersection(Line& A, Line& B){
    Vector v = A.P - B.P;
    double s = Cross(B.v, v) / Cross(A.v, B.v);
    return A.P + A.v * s;
}

bool Onleft(Line& L, Point& P){
    return Cross(L.v, P - L.P) > 0;
}

int n, m;
Line q[N], L[N];
Point p[N], land[N];

void HalfplaneIntersection(){
    int l = 1, r = 1;
    sort(L + 1, L + n + 1);
    q[l] = L[1];
    For(i,2,n){
        while(l < r && !Onleft(L[i], p[r-1])) r--;
        while(l < r && !Onleft(L[i], p[l])) l++;
        q[++r] = L[i];
        if(l < r && !dcmp(Cross(q[r].v, q[r-1].v))){
            r--;
            if(Onleft(q[r], L[i].P)) q[r] = L[i];
        }
        if(l < r) p[r-1] = Intersection(q[r-1], q[r]);
    }
    while(l < r && !Onleft(q[l], p[r-1])) r--;
    p[r] = Intersection(q[r], q[l]);
    For(i,l,r) p[i - l + 1] = p[i];
    m = r - l + 1;
}

int x[N], y[N];
int main(){
    scanf("%d", &n);
    For(i,1,n) scanf("%d", &x[i]);
    For(i,1,n) scanf("%d", &y[i]), land[i] = Point(x[i], y[i]);
    For(i,1,n-1) L[i] = Line(land[i], land[i+1]);
    L[n] = Line(Point(1e12, 1e12), Point(-1e12, 1e12));
    HalfplaneIntersection();
    sort(p + 1, p + m + 1);
    double Ans = 1e12;
    For(i,1,n)
        For(j,1,m-1)
            if(dcmp(x[i] - p[j].x) >= 0 && dcmp(x[i] - p[j+1].x) <= 0){
                Ans = min(Ans, p[j].y + (p[j+1].y - p[j].y) / (p[j+1].x - p[j].x) * (x[i] - p[j].x) - y[i]);
                break;
            }
    For(j,1,m)
        For(i,1,n-1)
            if(dcmp(p[j].x - x[i]) >= 0 && dcmp(p[j].x - x[i+1]) <= 0){
                Ans = min(Ans, p[j].y - (1.0 * y[i] + 1.0 * (y[i+1] - y[i]) / (x[i+1] - x[i]) * (p[j].x - x[i])));
                break;
            }
    printf("%.3lf\n", Ans);
    return 0;
}



Angular 相关的知识点和项目汇总 Angular 知识点和项目汇总 阅读详情

相关推荐

互联网金融项目实战(大数据Hadoop hive)

什么是互联网金融? 互联网金融 --> 信贷(信用贷款) --> 支付宝率先搞了一个信用体系 互联网金融: 在线支付、P2P 银行: 只会锦上添画、不喜欢雪中送炭 银行害怕出现坏账 ( 储户存钱,银行放贷 赚个利息差 ) 银行是可以倒闭的 保险公司不允许倒闭 银行分为:商业银行(自生自灭的)和非商业银行(国家的) 中国工商银行 全球第一大行 招商银行(清朝的一个李鸿章) 中国银行(历史超过 100 年了) 国家政策:希望银行能够扶持中小型企业 p2p:网络借贷平台 民间吸纳贷款 -->

weixin_58276266的博客 1552

BZOJ 1038 ZJOI 2008 瞭望塔 半平面交

题目大意:给出一个村庄的轮廓,在这个村庄里可以在任意的地方建一个瞭望塔,这个塔需要足够高,使得能够看得村庄的全貌。求这个瞭望塔的最小高度。 思路:对于村庄中的每一条边,瞭望塔为了看见它,必须要在这个直线左侧的半平面区域。这样的话为了满足所有的边的需求,做一次半平面交,瞭望塔的最高点必须在所有边的半平面交的区域内。 如下图样例。 所有边的半平面交区域就是上面的图形。设上面半平面的函

(╯°口°)╯(┴—┴ 1036

别再花屏了!手把手教你用STM32CubeIDE搞定LVGL 8.3移植(附完整源码)

本文详细介绍了如何在STM32CubeIDE环境下成功移植LVGL 8.3,解决常见的花屏问题。从环境配置、显示驱动优化到编译警告处理,提供完整的实战方案和源码示例,帮助开发者快速实现流畅的嵌入式GUI界面。特别针对STM32平台的DMA2D加速和内存管理进行了深度优化。

weixin_33739646的博客 241

bzoj1038 [ZJOI2008]瞭望塔(半平面交)

bzoj1038 [ZJOI2008]瞭望塔原题地址:http://www.lydsy.com/JudgeOnline/problem.php?id=1038题意: 村中要建立一个瞭望塔,我们将H村抽象为一维的轮廓。如下图所示 我们可以用一条山的上方轮廓折线(x1, y1), (x2, y2), …. (xn, yn)来描述H村的形状,这里x1 < x2 < …< xn。瞭望塔可以建造在[x1,

Bfk的博客 521

无人机+消防车:高楼灭火系统技术详解

传统的消防设备,如登高车、车载水枪、水炮和高喷车,在50米以上高度的火源面前往往力不从心,100米以上高层火灾则更加依赖消防员“爬楼”灭火,效率低下且风险极高。消防水带:采用聚乙烯丝材质,超轻、耐腐蚀、强度高,能够携带大量水或灭火泡沫进行高空喷水灭火作业。“无人机+消防车”高楼灭火系统主要由消防车和无人机两部分组成,通过机车联动实现高效灭火。高效灭火:无人机能够快速到达高层建筑顶部或指定位置进行灭火作业,大大提高了灭火效率。空压泡沫系统:配备超大水箱,支持长时间供应灭火泡沫,满足无人机灭火剂的需求。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 1667

泛微E8流程监控指南:如何用SQL实时追踪审批节点状态?

本文详细介绍了如何利用SQL实时监控泛微E8系统中的审批流程状态,包括核心数据表结构解析、全链路监控SQL实战以及智能预警机制设计。通过数据库直接查询和状态关联分析,帮助企业快速定位卡顿节点,提升流程效率。适用于需要优化OA系统流程管理的企业IT人员和业务主管。

weixin_30687051的博客 436

bzoj 1038: [ZJOI2008]瞭望塔 [半平面交]

1038: [ZJOI2008]瞭望塔 题意:一个山形轮廓线,建一个瞭望塔能看到所有点,求最小高度。 注意是山形 相邻两个点连线,半平面交,保留上面的。 不会出现一个点和隔着一些点的另一个点连线贡献的情况,因为瞭望塔一定高于最高点。 然后是个线性分段函数,枚举最值点... md有个点一直过不了,怒加特判 #include &lt;iostream&gt; #include &lt;cstdio...

weixin_33894640的博客 159

国民技术N32G45X SysTick定时器实战:从1us到100ms的精准延迟实现(附完整代码)

本文详细解析了国民技术N32G45X芯片中SysTick定时器的工作原理,并提供了从1微秒到100毫秒的高精度延迟实现方案。通过对比官方库函数的局限性,文章重点介绍了无中断查询模式、时钟源选择策略以及完整的代码实现,帮助嵌入式开发者精准控制时序,适用于LED控制、软件模拟通信协议等多种实战场景。

weixin_29190573的博客 372

[BZOJ1038][ZJOI2008]瞭望塔(半平面交)

1038: [ZJOI2008]瞭望塔 Time Limit: 10 SecMemory Limit: 162 MBSubmit: 2999Solved: 1227[Submit][Status][Discuss] Description   致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安。我们 将H村抽象为一维的轮廓。如下...

weixin_30902251的博客 105

uniapp | 基于高德地图实现位置选择功能(安卓端)

在uni-app项目中实现地图位置选择功能的解决方案。由于uni.chooseLocation功能受限,采用高德地图API自主开发。系统由父组件poiMap.vue(负责展示和跳转)和子组件poiBox.vue(核心地图逻辑)构成,通过父子组件通信传递位置数据。关键技术包括:1)使用AMapLoader动态加载地图SDK;2)集成PositionPicker实现拖拽选点;3)异步加载AMapUI插件;4)通过事件监听获取位置详情(地址/经纬度)。

大胆尝试,小心实践 731

基于STM32的六足机器人控制系统设计(项目资料ID:27)

六足机器人控制系统综合分析其结构、步态与控制算法,融合云端服务、Wi-Fi、蓝牙、语音识别及手势识别等多种技术,设计了多元化控制模式,并针对不同应用场景提出了差异化的构建方案。系统硬件采用分层设计,分为主控板与舵机控制板:主控板以 STM32F103VET6 为核心,负责各类控制模式的数据处理与状态显示;舵机控制板采用 STM32F103R8T6,专注于舵机角度的精确控制,两板通过串口实现数据交互。

以培养嵌入式工程师为己任 1万+

bzoj 1038[ZJOI2008]瞭望塔 - 半平面交

1038: [ZJOI2008]瞭望塔 Time Limit:10 SecMemory Limit:162 MB Description   致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安。我们将H村抽象为一维的轮廓。如下图所示 我们可以用一条山的上方轮廓折线(x1, y1), (x2, y2), …. (xn, y...

173

Claude Code 常见安装失败问题与解决办法

摘要: Claude Code安装失败通常与环境、网络和权限问题有关,而非软件本身。主要误区包括:命令未识别(需检查PATH和终端重启)、网络连接失败(终端代理配置)、权限不足(系统安全限制)及账号认证问题。首次使用应避免复杂任务,建议从基础功能测试开始。快速自检可按终端重启→命令识别→网络→代理→权限→账号状态的顺序排查。理顺终端、网络和权限后,Claude Code运行将更稳定。 (150字)

sg_knight的专栏 6692

NKOJ 3966 (ZJOI 2008)瞭望塔(半平面交/模拟退火)

P3966【ZJOI2008】瞭望塔 问题描述 致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安。 我们将H村抽象为一维的轮廓。如下图所示 我们可以用一条山的上方轮廓折线(x1, y1), (x2, y2), …. (xn, yn)来描述H村的形状,这里x1 &lt; x2 &lt; …&lt; xn。瞭望塔可以...

Mogician_Evian的博客 451

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

[P2600][ZJOI2008]瞭望塔(半平面交)

先在一个无穷高的位置画一条线为上界,把左右两端点向上连,形成一个封闭的多边形,求半平面交找到瞭望塔顶可以在的区域。因为点和点都是以直线连接的,斜率固定,所以半平面交到底边距离最近的点一定是某个拐点。那么把得到的集合内的线两两求一下交点,在从左到右依次求半平面交或是底边上的拐点到另一边的距离,找出最小值就可以了。 #include<cstdio> #include<cmath&...

seeeagull 211

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ZJOI2008 瞭望塔 半平面交

题意:给出一个以n个点为轮廓的村庄,在村庄任意位置放一个瞭望塔,使瞭望塔能看到村庄的所有位置,求瞭望塔最低高度。只我们发现只有这个点在每个直线所在半平面以上的时候才能看到,如样例图:还注意到,只有在原图的端点或半平面交的端点处才会更新答案。#include<cstdio> #include<algorithm> #include<cstring> #include<cmath> using name

Plume 羽 <。) 544

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

BZOJ 1038: [ZJOI2008]瞭望塔【半平面交】

题目传送门 题目分析: 先把相邻两个点形成的线拿来做一个半平面交得到可行区域。显然是个下凸壳。 如果在一条山的轮廓线的正上方上没有凸壳的顶点,那么在这条线上肯定是取两个端点之一最优。 如果正上方有凸壳的顶点,那么有可能取顶点最优。 所以只需要枚举所有的端点和顶点取最优解即可。 (注意凸壳的顶点的横坐标可能小于a[1].x或大于a[n].x) Code: #include<cstdio>...

Master.Yi的博客 301

【半平面交】【计算几何】[BZOJ1038][ZJOI2008]瞭望塔

题目描述致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安。我们将H村抽象为一维的轮廓。如下图所示 我们可以用一条山的上方轮廓折线(x1, y1), (x2, y2), …. (xn, yn)来描述H村的形状,这里x1 < x2 < …< xn。瞭望塔可以建造在[x1, xn]间的任意位置, 但必须满足从瞭望塔的顶端可以看到H村的任意位置。可见在不同的位

JeremyGJY的专栏 747

BZOJ 1038: [ZJOI2008]瞭望塔(半平面交)

题目 对于每个坡,能看到它的范围为一个半平面,做半平面交得到一个下凸壳。 发现答案一定在下凸壳的顶点或折线的顶点处取。 AC Code: #include<bits/stdc++.h> #define maxn 1005 #define eps 1e-8 using namespace std; int n; struct Point{ double x,y; Point (do...

Freopen的博客 238

【题解|两种做法】[ZJOI2008] 洛谷 P2600 瞭望塔[半平面交/三分]

好难调的题。

Isaac Regulus的博客 1019

bzo1038: [ZJOI2008]瞭望塔(半平面交)

传送门 题意:给出一个nnn个点的轮廓,要求找一个高度最小的点使得它能够看见所有拐点。 思路:之间建半平面交然后取半平面交上的每个交点和每个轮廓更新答案即可。 代码: #include&lt;bits/stdc++.h&gt; #define ri register int using namespace std; typedef long long ll; const int N=305; s...

苟为蒟蒻又何妨 295

[BZOJ1038][ZJOI2008]瞭望塔(半平面交)

题目: 我是超链接 题解: 很显然,只有瞭望塔和每个山顶形成直线的斜率的绝对值大于对应山坡的斜率,这个山坡才能看见。不难想到对所有的山坡求一个半平面交然后找到有山顶存在的部分,这个nO(n2)O(n^2)求个半平面交吧 一开始还以为瞭望塔只能建在山顶上,突然发现还可以建在山坡上,那么这个最优的点不在【山顶对应的凸包上】就在【凸包的顶点对应的山坡上】 1A 代码: #inc

薇小薇 495

【bzoj1038】【ZJOI2008】【瞭望塔】【半平面交】

Description   致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安。我们 将H村抽象为一维的轮廓。如下图所示 我们可以用一条山的上方轮廓折线(x1, y1), (x2, y2), …. (xn, yn)来描 述H村的形状,这里x1 以看到H村的任意位置。可见在不同的位置建造瞭望塔,所需要建造的高度是不同的。为了节省开支,dad

sunshinezff的专栏 930

BZOJ 1038 ZJOI2008 瞭望塔 半平面交

题目大意及模拟退火题解:见 http://blog.youkuaiyun.com/popoqqq/article/details/39340759  这次用半平面交写了一遍……求出半平面交之后,枚举原图和半平面交的每个点,求出答案即可 #include #include #include #include #include #define M 310 #define eps 1e-7 using name

世界 1807

[日常摸鱼]bzoj1038[ZJOI2008]瞭望塔-半平面交

这回好好用半平面交写一次… 看了cls当年写的代码看了好久大概看懂了…cls太强辣 #include<cstdio> #include<iostream> #include<algorithm> #define rep(i,n) for(register int i=1;i<=n;i++) #define REP(i,a,b) f...

142
上一篇: ZJOI 2008 Antbuster 巨型模拟
下一篇: WC2016 挑战NPC 一般图匹配
dy0607
博客等级 码龄12年 16粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值