题目链接:https://www.nowcoder.com/acm/contest/201/L
题目大意:给你n个圆和两条直线,在圆上,和圆内和直线上行走不消耗体力。
在其他位置上由S点走到T点消耗的体力为S和T的欧几里得距离。Hifumi Takimoto想从 L1 出发,走到 L2 。请计算最少需要多少体力。

思路:因为圆与直线的位置可以任意。从L1到L2,我们计算从c大的直线的到c小的直线距离就好了,如图L1->L2。
其实思路就是dp最短路。我们先按照圆与L1的距离排序。(排序依据不只是距离,因为可能在直线外)

int px(O pa, O pb)
{if(a*pa.x+b*pa.y+c1<0&&a*pb.x+b*pb.y+c1<0)//都在L1左边,按照距离L1的距离从大到小return pa.s<pb.s;else if(a*pa.x+b*pa.y+c1>0&&a*pb.x+b*pb.y+c1>0)//都在L1右边,按照距离L1的距离从小到大return pa.s>pb.s;elsereturn a*pa.x+b*pa.y+c1<a*pb.x+b*pb.y+c1?0:1;//一左一右,左在右前
}

所以递推公式(dp[i].s为初始到L1的距离)
dp[i].s=min(dp[j].s,d[i].s), j<i。
因为n<=1000;直接两种循环暴力。
先初始化s[i].s=d。

for(int i=0;i<n;i++)
{for(int j=i+1;j<n;j++){//d(ij)如图的黄色虚线距离。dp[j].s=(dp[i].s, d(ij));}
}

这样求出所有圆到L1的距离,在加上该圆的到L2的距离。
再求dp[i].s的最小距离就行了。

思考:这题当时写了两个小时,因为犯了不少错误。最后AC的瞬间,高兴跳起来的欢呼。这可能就是ACM的魅力吧!。

#include<bits/stdc++.h>
using namespace std;struct O
{double x;double y;double r;double s;
};
O w[1005];
long long n, a, b, c1, c2;int px(O pa, O pb)
{if(a*pa.x+b*pa.y+c1<0&&a*pb.x+b*pb.y+c1<0)return pa.s<pb.s;else if(a*pa.x+b*pa.y+c1>0&&a*pb.x+b*pb.y+c1>0)return pa.s>pb.s;elsereturn a*pa.x+b*pa.y+c1<a*pb.x+b*pb.y+c1?0:1;
}
int px1(O pa, O pb)
{return pa.s<pb.s;
}
int main()
{scanf("%lld%lld%lld%lld%lld",&n, &a, &b, &c1, &c2);for(int i=0;i<n;i++){scanf("%lf%lf%lf",&w[i].x, &w[i].y, &w[i].r);};if(c1>c2)swap(c1, c2);for(int i=0;i<n;i++)//初始化{double fz=fabs(a*w[i].x+b*w[i].y+c1);double fm=sqrt(a*a+b*b);double f1=fz/fm;if(f1<=w[i].r)w[i].s=0;elsew[i].s=f1-w[i].r;}sort(w,w+n, px);//圆的排序for(int i=0;i<n;i++)//dp递推{for(int j=i+1;j<n;j++){double s1=sqrt((w[i].x-w[j].x)*(w[i].x-w[j].x)+(w[i].y-w[j].y)*(w[i].y-w[j].y));double s2=w[i].r+w[j].r;if(s1>s2)w[j].s=min(w[i].s+s1-s2, w[j].s);elsew[j].s=min(w[i].s, w[j].s);}}for(int i=0;i<n;i++)//加上到L2的距离{double fz=fabs(a*w[i].x+b*w[i].y+c2);double fm=sqrt(a*a+b*b);double f1=fz/fm;if(f1<=w[i].r)w[i].s+=0;elsew[i].s+=f1-w[i].r;}sort(w,w+n, px1);//按s从小到大排序printf("%.6f\n",w[0].s);return 0;
}

牛客国庆集训派对Day1 New Game!+计算几何相关推荐

  1. 2020牛客国庆集训派对day1 A.ABB

    2020牛客国庆集训派对day1 A.ABB 题目链接 题目描述 Fernando was hired by the University of Waterloo to finish a develo ...

  2. (花里胡哨)New Game!(牛客国庆集训派对Day1)

    链接:https://ac.nowcoder.com/acm/contest/201/L 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言209 ...

  3. 牛客国庆集训派对Day1 C-Utawarerumono(扩展欧几里得)

    链接:https://www.nowcoder.com/acm/contest/201/C 来源:牛客网 算术是为数不多的会让Kuon感到棘手的事情.通常她会找Haku帮忙,但是Haku已经被她派去买 ...

  4. 牛客国庆集训派对Day1 J-Princess Principal (区间查询是否是正确的括号匹配)

    链接:https://www.nowcoder.com/acm/contest/201/J 来源:牛客网 阿尔比恩王国(the Albion Kingdom)潜伏着一群代号"白鸽队(Team ...

  5. 2020牛客国庆集训派对day1 Zeldain Garden

    Zeldain Garden 题意: 问[L,R]内所有数的因子的数量和 题解: 如果传统暴力做肯定不行 我们来找找规律: 数字: 因子数目 1~n的因子数和 1 1 1 2 2 3=2+1/ 3 2 ...

  6. 2020牛客国庆集训派对day1 C. Bob in Wonderland

    Bob in Wonderland 题意: 一棵树,问最少移动多少次边可以使其变成一个链? 移动是指:从原位置拆下并连到新位置,这样算一次 题解: 错误思路 我一开始在想既然求最少移动次数,那我们就尽 ...

  7. ABB (2020牛客国庆集训派对day1)

    ABB 题意: 长度为n的字符串,问最少添加多少字符可以使其构成回文字符串 题解: 最长回文字符串我的第一反应是manacher马拉车算法,那我们直接马拉车找到已有最长回文串,然后总长度减去不就是答案 ...

  8. 牛客国庆集训派对Day1: K. Tengen Toppa Gurren Lagann(贪心)

    K. Tengen Toppa Gurren Lagann 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言2097152K 64bit IO Format: ...

  9. 2021牛客国庆集训派对day1 H - Longest Path

    Description 给你一棵树,边有边权, 定义一条从u到v的路径,这一路上经过的点为e1,e2,...,eke_1,e_2,...,e_ke1​,e2​,...,ek​ 定义这条路径的权值f(u ...

最新文章

  1. 纪念逝去的头发--一次debug经历
  2. 【数据展示】matplotlib.pyplot.plot()探究
  3. Java的表白程序_java表白程序
  4. 监控软件nagios之安装
  5. 得到app文稿导出_再见了扫描仪!微信打开这个功能,一键将纸质文稿扫描成电子档...
  6. Markdown_LaTex_极限符号
  7. sqlserver 分组合并列_哪个“三人组”是历史最强组合?数据显示最均衡组合令人意外...
  8. ArcGIS线转面的方法
  9. 创建一个简单的数据库
  10. fpgrowth算法实战 mlib_MLlib--FPGrowth算法
  11. 软件定义网络带来新的自动化优势和挑战
  12. IDEA 社区版 常用插件列表
  13. 岁月温柔-10 妈妈的执念--不肯开空调,坚持使用油汀
  14. 爬虫关键信息获取与MongoDB数据库使用方法
  15. Windows 10打开远程桌面的方法
  16. 共享充电服务迭代背后,怪兽充电们走出“围城之困”?
  17. 安卓高通Diag命令解析
  18. 构建嵌入式系统软件开发环境-VMware的安装及搭建嵌入式Linux开发环境
  19. 迅为4412开发板(全能版)V_4.0 ubuntu 在Android4.4.4的内核下移植wifi
  20. Camlytics:智能摄像头监控软件

热门文章

  1. Ruby On Rails 4 hello world,Ruby On Rails上手
  2. 2022国赛数学建模思路 - 案例:线性优化-粒子群算法
  3. 速看!!带你揭秘3D建模行业内幕!!
  4. CSS简介代码实现表格(table)只有横线没有竖线的效果,一个简约卡片化精美的数据表格(类似Bootstrap表格)
  5. ios airplay mirroring镜像
  6. 无线测量APP开发总结
  7. 肠胃一直不好,该如何进行调理?
  8. 一款在线免费的甘特图,让你轻松管理项目进度
  9. iOS iTunes导入本地视频(文件共享)
  10. 如何在U-Boot中添加自定义命令