uva 10084 – Hotter Colder(半平面交)

uva 10084 – Hotter Colder(半平面交)题目 HotterColder 题意 在一

题目:Hotter Colder

题意:在一个左下角(0,0)右上角(10,10)的正方形里,有个东西藏在里面,一开始主角站在(0,0)点,然后他可以选择移动到(x,y)点,这时如果新点比旧点更接近目标,则得到“Hotter”,更远则”Colder”,距离一样则是”Same”,然后这个(x,y)作为旧点继续重复上述移动,每次移动后输出目标可能存在的区域的面积,如果不存在这样的面积输出0.00。

比较简单的半平面交问题,通过给出的信息不断切割目标范围。

假设原先的点是p0,到达的点是p1,那么可以先求出线段p0p1的中垂线,那么在这条线上的点就是到p0和p1距离一样。反过来如果说得到的是”Same”,说明目标范围就是一条线,线的面积是0。。。后面不用算了,全部输出0即可。

求出中垂线的话,这个中垂线可以用点和向量表示,那么我们就可以通过远近的情况确定出目标式在这个向量的左边还是右边,如果是右边还要转个方向,因为半平面交是保留左边的。利用这条线切割原先的区域就可以得到新的区域,然后就是简单算面积了。

PS:各种SB错误本地就调了1个钟,幸好交上去1Y。

#include 
  
    #include 
   
     #include 
    
      #include 
     
       using namespace std; #define pb push_back const double eps = 1e-8; int dcmp(double x){ if(fabs(x) 
      
        0; } typedef vector 
       
         Polygon; Polygon init(){ Polygon p; p.pb(Point(0.0, 0.0)); p.pb(Point(10.0, 0.0)); p.pb(Point(10.0, 10.0)); p.pb(Point(0.0, 10.0)); return p; } Point GetIntersection(Point A, Vector v, Point B, Vector w){ Vector u = A-B; double t = det(w, u)/det(v, w); return A+v*t; } bool OnSegment(Point P, Point A, Point B){ return dcmp(det(A-P, B-P))==0 && dcmp(dot(A-P, B-P))<0; } double Area(Polygon &p){ double S = 0.0; if(p.size()<=1) return 0.0; for(int i=1; i 
                  = 0) newpoly.pb(C); if(dcmp(det(L.v, C-D)) != 0){ Point ip = GetIntersection(L.P, L.v, C, D-C); if(OnSegment(ip, C, D)){ newpoly.pb(ip); } } } /* puts("new"); for(int i=0; i                                                    




版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/204413.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午8:21
下一篇 2026年3月19日 下午8:21


相关推荐

  • 几种简单的随机数算法「建议收藏」

    几种简单的随机数算法「建议收藏」(1)产生一个范围内的随机数j=(int)(100.0*rand()/(RAND_MAX+1.0))//产生0到100的随机数(2)筛选型随机数x=random(100);while(x==6){x=random(100);}//产生0-99的随机数但不能是6(3)从一段连续的范围内取随机数x=random(11)+

    2022年7月26日
    47
  • 【Python工具】Pycharm常用快捷键整理

    【Python工具】Pycharm常用快捷键整理一 最常用 ctrl shift A 万能命令行 shift 两次 查看资源文件 ctrl 注释 单行或者批量 ctrl F9 构建 shift F10 运行 ctrl f 搜索 ctrl shift f 全局搜索 ctrl alt L 格式代码 alt 鼠标 进入列编辑模式二 光标操作 ctrl alt enter 向上插入 shift enter 向下插入 end 光标三 操作代码 ctrl d 复制粘贴一行 ctrl y 删除一行 shift F6 重命令 ctrl O 复写代码四 格

    2026年3月27日
    1
  • 摄影后期人像高端摄影后期PS修图技巧[通俗易懂]

    摄影后期人像高端摄影后期PS修图技巧[通俗易懂]先自我介绍一下,叶子,职业修图师,从事数码后期行业12余载,擅长人像后期处理,婚纱照商业化修图,热爱摄影,喜欢旅行,总是用照片讲述故事。本文会从什么是**『皮肤质感』**,要修成这样的效果需要什么前置条件以及在过程中我们需要注意哪些核心要点为基准详细展开,意在让大家彻底明白怎样才能做出商业修图的皮肤效果。全文3504字,阅读时间约9分钟,如果觉得不愿意全看的话,可以直接拉到最后看结论。不…

    2022年6月15日
    38
  • IGMP协议_igmp协议常用3种报文

    IGMP协议_igmp协议常用3种报文IGMP介绍

    2025年11月18日
    4
  • python进阶(11)生成器[通俗易懂]

    python进阶(11)生成器[通俗易懂]生成器利用迭代器,我们可以在每次迭代获取数据(通过next()方法)时按照特定的规律进行生成。但是我们在实现一个迭代器时,关于当前迭代到的状态需要我们自己记录,进而才能根据当前状态生成下一个数据。

    2022年7月28日
    9
  • Internet Download Manager6.32(IDM)安装及激活成功教程方法[亲测有效]

    Internet Download Manager6.32(IDM)安装及激活成功教程方法[亲测有效]InternetDown 简称 IDM 是国外的一款优秀下载工具 该软件同时是一款共享软件 凭借着下载计算的速度优势在外媒网站中均受好评 能提升你的下载速度最多达 5 倍 支持断点续传功能 软件及激活成功教程工具下载地址 http sina lt fXVe 城通网盘下载地址 https u ctfile com fs

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号