题目链接:点击查看

题目大意:在二维平面的第一象限中给出两条射线代表河流,再给出起点和终点,问从起点出发,至少经过两条河各一次后到达终点的最短路

题目分析:如果只有一条河的话就是初中数学的经典问题了,现在加上了两条河无非就是多了分类讨论,但是分类讨论写的那份代码过了 96% 多,还是算了吧

考虑三分套三分,当在某条河上确定了一个交点后,可以通过三分去寻找另一条河交点的最短路,所以是可行的

需要注意的是,因为整个矩阵的大小最大是 100∗100100*100100∗100 的,在此之中河流的最大长度实际上是对角线的长度,也就是 2∗100\sqrt{2}*1002​∗100 的,所以三分的上界定到 200200200 倍的方向向量就可以啦

代码:

// Problem: Experiment Class
// Contest: NowCoder
// URL: https://ac.nowcoder.com/acm/contest/17574/E
// Memory Limit: 524288 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)// #pragma GCC optimize(2)
// #pragma GCC optimize("Ofast","inline","-ffast-math")
// #pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
#define lowbit(x) x&-x
using namespace std;
typedef long long LL;
typedef unsigned long long ull;
template<typename T>
inline void read(T &x)
{T f=1;x=0;char ch=getchar();while(0==isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(0!=isdigit(ch)) x=(x<<1)+(x<<3)+ch-'0',ch=getchar();x*=f;
}
template<typename T>
inline void write(T x)
{if(x<0){x=~(x-1);putchar('-');}if(x>9)write(x/10);putchar(x%10+'0');
}
const int inf=0x3f3f3f3f;
const int N=1e6+100;
// `计算几何模板`
const double eps = 1e-8;
//`Compares a double to zero`
int sgn(double x){if(fabs(x) < eps)return 0;if(x < 0)return -1;else return 1;
}
struct Point{double x,y;Point(){}Point(double _x,double _y){x = _x;y = _y;}void input(){scanf("%lf%lf",&x,&y);}bool operator == (Point b)const{return sgn(x-b.x) == 0 && sgn(y-b.y) == 0;}bool operator < (Point b)const{return sgn(x-b.x)== 0?sgn(y-b.y)<0:x<b.x;}Point operator -(const Point &b)const{return Point(x-b.x,y-b.y);}//返回两点的距离double distance(Point p){return hypot(x-p.x,y-p.y);}Point operator +(const Point &b)const{return Point(x+b.x,y+b.y);}Point operator *(const double &k)const{return Point(x*k,y*k);}Point operator /(const double &k)const{return Point(x/k,y/k);}
}t1,t2,st,ed;
double cal(Point x,Point y) {return st.distance(x)+x.distance(y)+y.distance(ed);
}
double solve2(Point x) {Point l=Point(0,0),r=t2;while(l<r) {Point mid=l+(r-l)/3;Point mmid=r-(r-l)/3;if(cal(x,mid)<cal(x,mmid)) {r=mmid;} else {l=mid;}}return cal(x,l);
}
double solve1() {Point l=Point(0,0),r=t1;while(l<r) {Point mid=l+(r-l)/3;Point mmid=r-(r-l)/3;if(solve2(mid)<solve2(mmid)) {r=mmid;} else {l=mid;}}return solve2(l);
}
int main()
{#ifndef ONLINE_JUDGE
//  freopen("data.in.txt","r",stdin);
//  freopen("data.out.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);t1.input(),t2.input(),st.input(),ed.input();t1=t1*200,t2=t2*200;double ans=solve1();swap(st,ed);ans=min(ans,solve1());printf("%.3f\n",ans);return 0;
}

上海理工大学第二届“联想杯”全国程序设计邀请赛 - Experiment Class(几何+三分套三分)相关推荐

  1. 上海理工大学第二届“联想杯”全国程序设计邀请赛

    文章目录 上海理工大学第二届"联想杯"全国程序设计邀请赛 A.A-SOUL! B.Bheith i ngra le C.Counting Cats! D.Dahno Dahno E ...

  2. 上海理工大学第二届“联想杯”全国程序设计邀请赛 - Little Witch Academia(矩阵快速幂)

    题目链接:点击查看 题目大意:给出两种型号的瓷砖,尺寸分别是 a∗1a*1a∗1 和 b∗1b*1b∗1,现在需要填满 w∗hw*hw∗h 的矩阵,需要满足以下两个情况: 瓷砖不能旋转 相邻的两行中, ...

  3. 上海理工大学第二届“联想杯”全国程序设计邀请赛 - Dahno Dahno(SW)

    题目链接:点击查看 题目大意:给出一个有 nnn 个点的无向图,要求将其分成两个集合,使得总权值最大,每个集合需要非空 题目分析:SW模板题,套上即可 代码: // Problem: Dahno Da ...

  4. 上海理工大学第二届“联想杯”全国程序设计邀请赛 Identical Day 思维 + 暴力

    传送门 文章目录 题意: 思路: 题意: 给你一个010101序列,假设有一段长为lll连续的全111子串,定义这段字串不高兴值为l∗(l+1)2\frac{l*(l+1)}{2}2l∗(l+1)​, ...

  5. 2016第二届美亚杯全国电子数据取证大赛团队赛write up

    2016第二届美亚杯全国电子数据取证大赛 团队赛wp 本人TEL15543132658 同wechat,欢迎多多交流,wp有不足欢迎大家补充多多探讨! A部分write up 关于Hugo计算机的附加 ...

  6. 2016年 第二届美亚杯全国电子数据取证大赛个人赛write up

    2016年 第二届美亚杯个人赛write up 本人TEL15543132658 同wechat,欢迎多多交流,wp有不足欢迎大家补充多多探讨! 前景概要: 你会获得一个包含Hugo电脑硬盘的镜像文件 ...

  7. 第二届天府杯数学建模竞赛

    2022年第二届天府杯全国大学生数学建模竞赛正式官宣为省级赛事!四川省生产力促进中心挂牌在四川省自然资源科学研究院,是国家级生产力促进中心和国家级技术转移中心.想参加数模竞赛的快来报名啦~是由成都锦城 ...

  8. 2020 年 “联想杯”全国高校程序设计在线邀请赛暨第三届上海理工大学程序设计竞赛题解

    2020 年 "联想杯"全国高校程序设计在线邀请赛暨第三届上海理工大学程序设计竞赛题解 萌新又来写题解啦 原题链接 (不是按照题号顺序来的QWQ) L. Lottery Ticke ...

  9. 北京理工大学计算机学院赵曜,北理工学子参加第十届蓝桥杯全国软件和专业人才大赛取得佳绩...

    5月25日,第十届"蓝桥杯"全国软件专业人才设计与创业大赛在北京大学.首都经济贸易大学等多所高校同步举办.北京理工大学ACM俱乐部派出的21名参赛队员,经过长达四个小时的激烈角逐最 ...

最新文章

  1. 【深度学习】DIY 人脸识别技术的探索(二)
  2. 繁琐又危险的任务(varchar--nvarchar)
  3. shell实例第16讲:猜拳游戏
  4. 2020 ICPC亚洲区域赛(沈阳)F-Kobolds and Catacombs(思维+模拟)
  5. 试用期java_Java 7试用资源
  6. html css 知识回顾2
  7. ffmpeg h264+ts +udp传输
  8. 图像识别_2010暑期实训有感【二】
  9. cursor -- 定义鼠标样式
  10. 罗马音平假名中文可复制_这首歌,代表了我们的青春,你会唱吗(附op罗马音中文音译)...
  11. 车载etc充值显示服务器连接失败,为什么有的etc会显示余额,有的没有
  12. 世界上第一个科学家是谁
  13. 非共识大会 | 伍鸣博士:DApp发展需要一条高性能且安全的公链
  14. 测试手机单核性能软件,跑分软件Geekbench公布“作弊”名单:华为6款手机上榜...
  15. android 第三方 im,Android基于环信SDK开发IM即时聊天
  16. java echarts 柱形图数字显示在顶部
  17. 服务器显示器如何更换,笔记本怎么换显示器_笔记本换显示器教程-win7之家
  18. 【python掩膜及多子图colorbar】
  19. 牛客华为机试题刷题笔记总结[103题更新完毕才收尾,建议关注收藏]
  20. 使用mkiso向服务器传文件,Linux mkisofs 创建光盘镜像文件(Linux指令学习笔记)

热门文章

  1. phpstudy mysql优化_MySQL_MySQL优化之对RAND()的优化方法,众所周知,在MySQL中,如果直 - phpStudy...
  2. 保存的图数据丢失_自从用了这2个功能,再也没有担心过文档丢失
  3. springboot基本属性注入
  4. 通过Nginx简单安装
  5. 工作中用到的设计模式?
  6. 拉链法导致的链表过深问题为什么不用二叉查找树代替,而选择红黑树?为什么不一直使用红黑树?
  7. 消息发送到消息接收的整体流程
  8. 如何保证消息消费顺序呢?
  9. kafka高可用集群原理
  10. 在linux下创建自定义service服务