首先,让我骂一句那没事找事的Car
还取一个那么奇怪的名字
看到这个题,恕我直言,我们明显可以看出这是一道图的最短路问题。由于这个题的数据范围很小(s只有100),所以在这里我们选取时间复杂度为O(n^3)的Floyd主要是好写。
相信大家都想得到这些,其实这道题最大的难点在预处理所以我刚才说了一大堆废话,针对他给出的每个城市,我们应该如何处理呢?
首先是读入

 int a,b;
scanf("%d%d%d%d",&n,&tf,&a,&b);
for(int i=;i<=*n;i++)
for(int j=;j<=*n;j++)
e[i][j]=inf;
for(int i=;i<=n;i++)
{
for(int j=;j<=;j++)
scanf("%d",wz[i]+j);
for(int j=;j<=;j+=)
{
wz[i][]+=wz[i][j];
wz[i][]+=wz[i][j+];
}
scanf("%d",wz[i]+);

这里用了一个wz[][]数组,wz[i][j](j=1,3,5,7)表示第i座城市的四个点的横坐标,wz[i][j](j=2,4,6,8)表示第i座城市的四个点的纵坐标,而j=9则是路费。其中wz[i][7]与wz[i][8]是要去计算的。

而怎么算呢?我们可以得到一个公式xd=xa+xb-xc。 (y类似)(我们可以知道,已知的三点肯定是一个直角三角形,而(xa,ya)是TA的直角顶点,(xd,yd)便是TA所对的点。公式证明留给读者去思考。提示:利用两对角线交点是中点,然后使用中点坐标公式。)但我们还需要知道谁是直角顶点,这里很明显可以利用勾股定理求解。(当然还可以使用斜率乘积等于-1,但作者血与泪的教训还是建议你不要尝试。也可能是我太菜了)

计算代码
 double tp[];
int tp2=inf,tp3;
tp[]=dist1(wz[i][],wz[i][],wz[i][],wz[i][]);
tp[]=dist1(wz[i][],wz[i][],wz[i][],wz[i][]);
tp[]=dist1(wz[i][],wz[i][],wz[i][],wz[i][]);
if(tp[]+tp[]==tp[]){//我在之前把wz[i][7]处理成wz[i][1,3,5]的和,
//这里直接减两倍横纵坐标
wz[i][]-=*wz[i][];wz[i][]-=*wz[i][];
}
else if(tp[]+tp[]==tp[]){
wz[i][]-=*wz[i][];wz[i][]-=*wz[i][];
}
else if(tp[]+tp[]==tp[]){
wz[i][]-=*wz[i][];wz[i][]-=*wz[i][];
}
}

这是dis1函数

double dist(int a,int b,int c,int d){
return sqrt((a-b)*(a-b)*1.0+1.0*(c-d)*(c-d));
}

然后枚举构造某城市之间飞机场的边。(这里我把城市里的每个顶点当一个点)

 for(int i=;i<=n;i++)
{
for(int j=;j<=;j++)
for(int k=j;k<=;k++)
{
int u=(i-)*+j,v=(i-)*+k;//记得减一
double dis=dist(wz[i][j*-],wz[i][k*-],wz[i][j*],wz[i][k*]);
e[u][v]=e[v][u]=dis*wz[i][];
}
}

dist函数(与dist1的唯一区别就是开了根号)

 double dist(int a,int b,int c,int d){
return sqrt((a-b)*(a-b)*1.0+1.0*(c-d)*(c-d));
}

接下来便是城市间最短距离的代码

 for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(i!=j){//关键!!!作者调了一小时(┬_┬)
for(int k=;k<=;k++)
for(int l=;l<=;l++)
{
int u=(i-)*+k,v=(j-)*+l;
double dis=dist(wz[i][k*-],wz[j][l*-],wz[i][k*],wz[j][l*]);
e[u][v]=dis*tf;
}
}

然后便是我们期待已久的Floyd

for(int k=;k<=n*;k++)
for(int i=;i<=n*k;i++)
for(int j=;j<=n*;j++)
if(e[i][j]>e[i][k]+e[k][j])
e[i][j]=e[i][k]+e[k][j];

最后枚举起点终点,找到最短路

 ouble ans=inf;
for(int i=(a-)*+;i<=a*;i++)
for(int j=(b-)*+;j<=b*;j++)
ans=min(ans,e[i][j]);
printf("%.1lf",ans);

是不是很简单?

害我调了半天,万恶的Car
最后给出完整代码

 
 #include<bits/stdc++.h>
using namespace std;
const int maxn=,maxm=,inf=0x3f3f3f3f;
double e[][];
int wz[][];
int n,tf;
double dist(int a,int b,int c,int d){
return sqrt((a-b)*(a-b)*1.0+1.0*(c-d)*(c-d));
}
double dist1(int a,int b,int c,int d){
return (a-b)*(a-b)*1.0+1.0*(c-d)*(c-d);
}
int main()
{
int t;
cin>>t;
while(t--)
{
int a,b;
scanf("%d%d%d%d",&n,&tf,&a,&b);
for(int i=;i<=*n;i++)
for(int j=;j<=*n;j++)
e[i][j]=inf;
for(int i=;i<=n;i++)
{
for(int j=;j<=;j++)
scanf("%d",wz[i]+j);
for(int j=;j<=;j+=)
{
wz[i][]+=wz[i][j];
wz[i][]+=wz[i][j+];
}
scanf("%d",wz[i]+);
double tp[];
int tp2=inf,tp3;
tp[]=dist1(wz[i][],wz[i][],wz[i][],wz[i][]);
tp[]=dist1(wz[i][],wz[i][],wz[i][],wz[i][]);
tp[]=dist1(wz[i][],wz[i][],wz[i][],wz[i][]);
if(tp[]+tp[]==tp[]){
wz[i][]-=*wz[i][];wz[i][]-=*wz[i][];
}
else if(tp[]+tp[]==tp[]){
wz[i][]-=*wz[i][];wz[i][]-=*wz[i][];
}
else if(tp[]+tp[]==tp[]){
wz[i][]-=*wz[i][];wz[i][]-=*wz[i][];
}
}
for(int i=;i<=n;i++)
{
for(int j=;j<=;j++)
for(int k=j;k<=;k++)
{
int u=(i-)*+j,v=(i-)*+k;
double dis=dist(wz[i][j*-],wz[i][k*-],wz[i][j*],wz[i][k*]);
e[u][v]=e[v][u]=dis*wz[i][];
}
}
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(i!=j){
for(int k=;k<=;k++)
for(int l=;l<=;l++)
{
int u=(i-)*+k,v=(j-)*+l;
double dis=dist(wz[i][k*-],wz[j][l*-],wz[i][k*],wz[j][l*]);
e[u][v]=dis*tf;
}
}
for(int k=;k<=n*;k++)
for(int i=;i<=n*k;i++)
for(int j=;j<=n*;j++)
if(e[i][j]>e[i][k]+e[k][j])
e[i][j]=e[i][k]+e[k][j];
double ans=inf;
for(int i=(a-)*+;i<=a*;i++)
for(int j=(b-)*+;j<=b*;j++)
ans=min(ans,e[i][j]);
printf("%.1lf",ans);
}
return ;
}

洛谷P1027题解的更多相关文章

  1. 洛谷P1027 Car的旅行路线

    洛谷P1027 Car的旅行路线 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速 ...

  2. [洛谷P3376题解]网络流(最大流)的实现算法讲解与代码

    [洛谷P3376题解]网络流(最大流)的实现算法讲解与代码 更坏的阅读体验 定义 对于给定的一个网络,有向图中每个的边权表示可以通过的最大流量.假设出发点S水流无限大,求水流到终点T后的最大流量. 起 ...

  3. 洛谷P5759题解

    本文摘自本人洛谷博客,原文章地址:https://www.luogu.com.cn/blog/cjtb666anran/solution-p5759 \[这道题重在理解题意 \] 选手编号依次为: \ ...

  4. 关于三目运算符与if语句的效率与洛谷P2704题解

    题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图.在每一格平原地形上最 ...

  5. c++并查集配合STL MAP的实现(洛谷P2814题解)

    不会并查集的话请将此文与我以前写的并查集一同食用. 原题来自洛谷 原题 文字稿在此: 题目背景 现代的人对于本家族血统越来越感兴趣. 题目描述 给出充足的父子关系,请你编写程序找到某个人的最早的祖先. ...

  6. 洛谷P2607题解

    想要深入学习树形DP,请点击我的博客. 本题的DP模型同 P1352 没有上司的舞会.本题的难点在于如何把基环树DP转化为普通的树上DP. 考虑断边和换根.先找到其中的一个环,在上面随意取两个点, 断 ...

  7. 【洛谷】题解 P1056 【排座椅】

    题目链接 因为题目说输入保证会交头接耳的同学前后相邻或者左右相邻,所以一对同学要分开有且只有一条唯一的通道才能把他们分开. 于是可以吧这条通道累加到一个数组里面.应为题目要求纵列的通道和横列的通道条数 ...

  8. 洛谷 P1027 Car的旅行路线

    P1027 Car的旅行路线 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路 ...

  9. 洛谷P3572题解

    这道题实在是一道 毒瘤 题,太坑爹了.那个写 \(deque\) 的题解亲测只有80分,原因 不言而明 ,这道题居然 丧心病狂 到 卡STL . 好了,不吐槽了,进入正题 题目分析: 这是一道十分 简 ...

随机推荐

  1. 立体匹配-----NCC视差匹配

    目录 一.立体匹配算法 1.立体匹配算法分类 二.NCC 视差匹配方法 1.原理 2.NCC计算公式 3.算法流程 4.代码实现     5.不同场景运行 三.结论 四.遇到的问题及解决方法 一.立体 ...

  2. Django编写自定义manage.py 命令

    官网文档地址:编写自定义 django-admin 命令 金句: 你所浪费的今天,正是昨天死的人所期待的明天. 开篇话: python manage.py <command> 的命令我们用 ...

  3. thinkphp5.0.x

    payload5.0.24 http://-----/index.php?s=index/think\app/invokefunction&function=call_user_func_ar ...

  4. php函数封装

    这是一些自定义封装的函数类,调用起来很方便,以后会有更多的封装函数更新! // 弹框跳转function alert($msg,$url=''){ echo "<script>& ...

  5. Golang快速入门:从菜鸟变大佬

    最近写了不少Go代码,但是写着写着,还是容易忘,尤其是再写点Python代码后.所以找了一篇不错的Golang基础教程,翻译一下,时常看看. 原文链接: 「Learning Go - from zer ...

  6. Python与Excel交互——Xlwings实战

    这一期直接来实战. 比如说,我们在一个快递网站上爬取了几个快递的轨迹信息,我们需要将数据保存下来,一个常规做法是把数据保存在数据库里(Mysql,MongoDB,Redis),另一个是用Excel的形 ...

  7. centos 服务器上部署 xxl-job 通过 feign 访问 eureka 上注册的 service timeout

    部署方式 1.使用 jar 包部署 出现的问题 1.通过 feign 调用其他服务,出现超时的问题,该问题不是 ribbon.hystrix 没有配置导致的超时,经过测试,即使配置了也没有作用,该方法 ...

  8. Spring Boot Starters介绍

    文章目录 Web Start Test Starter Data JPA Starter Mail Starter 结论 对于任何一个复杂项目来说,依赖关系都是一个非常需要注意和消息的方面,虽然重要, ...

  9. Zookeeper之Error contacting service. It is probably not running.

    安装ZooKeeper时,无论是修改zoo.cfg:还是myid,都检查了几遍都没有错误.但是开启Zookeeper服务时出现: Error contacting service. It is pro ...

  10. vue 比 js的强大

    //js写留言板 <!DOCTYPE html><html lang="en"><head> <meta charset="UT ...