dijkstra

已经提交 已经通过

42.86%

Total Submission:189

Total Accepted:81

题目描述

Eagle Jump公司正在开发一款新的游戏。泷本一二三作为其员工,获得了提前试玩的机会。现在她正在试图通过一个迷宫。

这个迷宫有一些特点。为了方便描述,我们对这个迷宫建立平面直角坐标系。迷宫中有两条平行直线 L_1:Ax+By+C_1=0L1​:Ax+By+C1​=0, L_2:Ax+By+C_2=0L2​:Ax+By+C2​=0,还有 nn 个圆 C_i:(x-x_i)^2+(y-y_i)^2={r_i}^2Ci​:(x−xi​)2+(y−yi​)2=ri​2。角色在直线上、圆上、圆内行走不消耗体力。在其他位置上由SS点走到TT点消耗的体力为SS和TT的欧几里得距离。

泷本一二三想从 L_1L1​ 出发,走到 L_2L2​ 。请计算最少需要多少体力。

 
 

输入描述

第一行五个正整数 n,A,B,C_1,C_2n,A,B,C1​,C2​ (1\le n \le 1000, -10000 \le A,B,C_1,C_2 \le 10000)(1≤n≤1000,−10000≤A,B,C1​,C2​≤10000),其中 A,BA,B 不同时为 0。

接下来 nn 行每行三个整数 x,y,r(-10000 \le x,y \le 10000, 1\le r \le 10000)x,y,r(−10000≤x,y≤10000,1≤r≤10000) 表示一个圆心为 (x,y)(x,y),半径为 rr 的圆。

输出描述

仅一行一个实数表示答案。与标准答案的绝对误差或者相对误差不超过 10^{-4}10−4 即算正确。

样例输入 1

2 0 1 0 -4
0 1 1
1 3 1

样例输出 1

0.236068

题意:给定两个平行的直线,直线中间有若干个圆,点在直线和圆上行走不消耗能力。问从第一条直线走到第二条直线最小需要消耗多少能量。
距离即代表消耗的能力。
思路:
1、首先处理每一个圆心到其他圆心和直线的距离,以各个圆心点和直线缩成点构成一个图,然后根据距离跑最短路算法即可。
2、注意距离减去半径的时候如果是负数要赋值为0。
细节见我的代码;
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <map>
#include <set>
#include <vector>
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define pii pair<int,int>
#define pll pair<long long ,long long>
#define gbtb std::ios::sync_with_stdio(false)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MSC0(X) memset((X), '\0', sizeof((X)))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define gg(x) getInt(&x)
using namespace std;
typedef long long ll;
inline void getInt(int* p);
/*** TEMPLATE CODE STARTS HERE ***/
const int maxn=;
const int INF= 0x3f3f3f3f;
struct Node
{
int to;
double dist;
Node(){}
Node(int _n,double _d)
{
to=_n;
dist=_d;
}
bool operator < (const Node x ) const
{
return dist > x.dist;
}
};
priority_queue<Node> heap;
vector <Node> Map[maxn];
double dis[maxn];
int t,n,star;
void dijkstra (int strat)
{
// memset(dis,INF,sizeof(dis));
repd(i,,maxn-)
{
dis[i]=9999999999.0;
}
dis[strat]=;
heap.push(Node(strat,dis[strat]));
while(!heap.empty())
{
Node x= heap.top();
heap.pop();
int LEN=Map[x.to].size();
rep(i,,LEN)
{
Node now =Map[x.to][i];
if(dis[now.to]>x.dist+now.dist)
{
dis[now.to]=x.dist+now.dist;
heap.push(Node(now.to,dis[now.to]));
}
}
} }
int a,b,c1,c2;
struct yuan
{
int x,r,y;
}y[maxn];
double getdis(int id)
{
double res=0.00000;
res=max(0.000,fabs(a*y[id].x+b*y[id].y+c1)*1.000/sqrt(a*a+b*b));
return res; }
double getdis2(int id)
{
double res=0.00000;
res=max(0.00,fabs(a*y[id].x+b*y[id].y+c2)*1.000/sqrt(a*a+b*b));
return res; }
int main()
{
// scanf("%d %d %d",&n,&t,&star);
// int a,b,d;
// repd(i,1,t)
// {
// scanf("%d %d %d",&a,&b,&d);
// Map[a].pb(Node(b,d));
// // Map[b].pb(Node(a,d));
// }
// dijkstra(star);
// printf("%d\n",ans);
gg(n);
gg(a);gg(b);gg(c1);gg(c2);
repd(i,,n+)
{
gg(y[i].x);
gg(y[i].y);
gg(y[i].r);
}
repd(i,,n+)
{
double dt=max(getdis(i)-y[i].r,0.00);
Map[].push_back(Node(i,dt));
Map[i].push_back(Node(,dt));
}
repd(i,,n+)
{
double dt=max(getdis2(i)-y[i].r,0.00);
Map[].push_back(Node(i,dt));
Map[i].push_back(Node(,dt));
}
repd(i,,n+)
{
repd(j,,n+)
{
if(i==j)
{
continue;
}else
{
double dt=max(0.000,-y[i].r-y[j].r+sqrt((y[i].x-y[j].x)*(y[i].x-y[j].x)+(y[i].y-y[j].y)*(y[i].y-y[j].y)));
Map[i].push_back(Node(j,dt));
Map[j].push_back(Node(i,dt));
}
}
}
dijkstra();
printf("%.6lf\n",dis[] );
return ;
} inline void getInt(int* p) {
char ch;
do {
ch = getchar();
} while (ch == ' ' || ch == '\n');
if (ch == '-') {
*p = -(getchar() - '');
while ((ch = getchar()) >= '' && ch <= '') {
*p = *p * - ch + '';
}
}
else {
*p = ch - '';
while ((ch = getchar()) >= '' && ch <= '') {
*p = *p * + ch - '';
}
}
}

Comet OJ 热身赛(E题)(处理+最短路算法)的更多相关文章

  1. Comet OJ 热身赛(K题)principal(括号匹配问题+stack模拟)

    principal 已经提交 已经通过 23.66% Total Submission:131 Total Accepted:31 题目描述 阿尔比恩王国潜伏着代号白鸽队''的一群间谍.在没有任务的时 ...

  2. Comet OJ 热身赛-principal

    这题的话,我们分析一下,入栈的操作是: 栈空 栈顶元素和当前操作元素不属于同一类括号 栈顶元素和当前操作元素属于同一类括号,但是并不是左括号在前,右括号在后 上面三个条件有任意一个满足都应该入栈,如果 ...

  3. isaster(Comet OJ - Contest #11D题+kruskal重构树+线段树+倍增)

    目录 题目链接 思路 代码 题目链接 传送门 思路 \(kruskal\)重构树\(+\)线段树\(+\)倍增 代码 #include <set> #include <map> ...

  4. Comet OJ - Contest #4--前缀和

    原题:Comet OJ - Contest #4-B https://www.cometoj.com/contest/39/problem/B?problem_id=1577传送门 一开始就想着暴力打 ...

  5. Comet OJ - Contest #11 题解&赛后总结

    Solution of Comet OJ - Contest #11 A.eon -Problem designed by Starria- 在模 10 意义下,答案变为最大数的最低位(即原数数位的最 ...

  6. Comet OJ 计算机(computer)

    Comet OJ 计算机(computer) 题目传送门 题目描述 小 X 有一台奇怪的计算机. 这台计算机首先会读入一个正整数 nn,然后生成一个包含 nn 个数的序列 aa. 一开始 a_i(1 ...

  7. Comet OJ - Contest #13-C2

    Comet OJ - Contest #13-C2 C2-佛御石之钵 -不碎的意志-」(困难版) 又是一道并查集.最近做过的并查集的题貌似蛮多的. 思路 首先考虑,每次处理矩形只考虑从0变成1的点.这 ...

  8. Comet OJ 2019 夏季欢乐赛题解

    Comet OJ 2019 夏季欢乐赛题解 我是来骗访问量的 A 完全k叉树 \(n\)个点的完全k叉树的直径. 直接做 B 距离产生美 直接做 C 烤面包片 \(n!!!\mod p\) 显然\(n ...

  9. Comet OJ - Contest #13 「火鼠的皮衣 -不焦躁的内心-」

    来源:Comet OJ - Contest #13 芝士相关: 复平面在信息学奥赛中的应用[雾 其实是道 sb 题??? 发现原式貌似十分可二项式定理,然后发现确实如此 我们把 \(a^i\) 替换成 ...

随机推荐

  1. SQL Server 2012 手动安装帮助文档+排错

    逆天SQL Server 2012装的不要不要的,最后发现...竟然没帮助文档...汗啊!原来它跟vs一样要自己装帮助文档...好吧,官网一下载,妹的...报错...然后就让我们还原这个安装过程以及逆 ...

  2. 自动化测试基础篇--Selenium单选框(Radio)复选框(CheckBox)

    摘自:https://www.cnblogs.com/sanzangTst/p/7686602.html 一.什么是单选框.复选框? 二.单选框:radio 三.复选框:checkbox 四.判断是否 ...

  3. hive笔记:转义字符的使用

    hive中的转义符 Hadoop和Hive都是用UTF-8编码的,所以, 所有中文必须是UTF-8编码, 才能正常使用 备注:中文数据load到表里面, 如果字符集不同,很有可能全是乱码需要做转码的, ...

  4. Windows Server 2016-管理站点复制(二)

    为了保持所有域控制器上的目录数据一致和最新,Active Directory 会定期复制目录更改.复制根据标准网络协议进行,并使用更改跟踪信息防止发生不必要的复制,以及使用链接值复制以提高效率. 本章 ...

  5. MyBatis:参数传递 [转]

    一.单个参数: public List<XXBean> getXXBeanList(String xxCode); <select id="getXXXBeanList&q ...

  6. C# -- 使用System.Environment获取电脑的相关属性

    使用System.Environment获取电脑的相关属性 1.使用System.Environment获取电脑的相关属性(入门案例) static void Main(string[] args) ...

  7. LeetCode算法题-Find All Numbers Disappeared in an Array(Java实现)

    这是悦乐书的第232次更新,第245篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第99题(顺位题号是448).给定一个整数数组,其中1≤a[i]≤n(n =数组的大小) ...

  8. Java 8 新特性:4-断言(Predicate)接口

    (原) 这个接口主要用于判断,先看看它的实现,说明,再给个例子. /* * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All ri ...

  9. TLB的作用及工作过程

    下面内容摘自<步步惊芯--软核处理器内部设计分析>一书          页表一般都非常大,而且存放在内存中,所以处理器引入MMU后,读取指令.数据须要訪问两次内存:首先通过查询页表得到物 ...

  10. 深入学习vue指令,自定义指令解决开发痛点

    每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code v-model指令 vue.js的定义是一个mvvm框架,将它发挥到极致能够极大的提升 ...