题目描述 Description

又到暑假了,住在城市A的Car想和朋友一起去城市B旅游。她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路,第I个城市中高速铁路了的单位里程价格为Ti,任意两个不同城市的机场之间均有航线,所有航线单位里程的价格均为t。

那么Car应如何安排到城市B的路线才能尽可能的节省花费呢?她发现这并不是一个简单的问题,于是她来向你请教。
任务
找出一条从城市A到B的旅游路线,出发和到达城市中的机场可以任意选取,要求总的花费最少。

输入描述 Input Description

第一行为一个正整数n(0<=n<=10),表示有n组测试数据。
每组的第一行有四个正整数s,t,A,B。
S(0<S<=100)表示城市的个数,t表示飞机单位里程的价格,A,B分别为城市A,B的序号,(1<=A,B<=S)。
接下来有S行,其中第I行均有7个正整数xi1,yi1,xi2,yi2,xi3,yi3,Ti,这当中的(xi1,yi1),(xi2,yi2),(xi3,yi3)分别是第I个城市中任意三个机场的坐标,T I为第I个城市高速铁路单位里程的价格。

输出描述 Output Description

共有n行,每行一个数据对应测试数据。

样例输入 Sample Input

1
3 10 1 3
1 1 1 3 3 1 30
2 5 7 4 5 2 1
8 6 8 8 11 6 3

样例输出 Sample Output

47.5

数据范围及提示 Data Size & Hint

如描述

思路分析:求出第四个点,一开始感觉什么高大上呢,其实就是勾股定理,三种情况,稍微注意下存边,再加上最短路就好,做了半天,当在同一城市时火车的价钱打成了机场的,卡了好久MD,加强静态查错能力。。

PS:基本上是看了(http://wenku.baidu.com/link?url=n3hmdiEGTq9j-cBOP7ZUC7t6Ea8FwG6vbrFDTeKhe5hi_x3flKpzelERXByhlQ2gbj7kzJXyZBwSkgAPIxISrkDzIp5bEl0oI9aP5tWbc-a),讲得很好。

Source:

 #include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
int n,vf,start,end,s;
int map[][],vn[];
bool used[];
double ans[];
double dist(int x1,int y1,int x2,int y2)
{
return (sqrt(pow((x1-x2),)+pow((y1-y2),)));
}
void dijistra()//dijistra求最短路 。
{
int i,j,now,apt;
double minn,u;
memset(used,,sizeof(used));
memset(ans,,sizeof(ans));
minn=;
used[start*]=true;
used[start*-]=true;
used[start*-]=true;
used[start*-]=true;
while (==)
{
minn=;
for (i=;i<=*n;i++)//枚举被经过的机场,对其余未被经过的机场进行dijstra。
{
if (used[i])
{
now=(i-)/+;
for (j=;j<=*now-;j++)// 若未被经过的机场dis值最小的在当前最短路的机场所在城市"前面",枚举所在城市的前面的机场。
{
if (!used[j])
{
u=ans[i]+dist(map[i][],map[i][],map[j][],map[j][])*vf;
if (u<minn)
{
minn=u;
apt=j;//记录机场位置
}
}
} for (j=*now-;j<=*now;j++)//若未被经过的机场dis值最小的和当前最短路的机场处于同一个城市,换交通方式。
{
if (!used[j])
{
u=ans[i]+dist(map[i][],map[i][],map[j][],map[j][])*vn[now];
if (u<minn)
{
minn=u;
apt=j;
}
}
}
for (j=*now+;j<=*n;j++)//同第一种情况。
{
if (!used[j])
{
u=ans[i]+dist(map[i][],map[i][],map[j][],map[j][])*vf;
if (u<minn)
{
minn=u;
apt=j;
}
}
} }
}
if ((apt==*end-) || (apt==*end-) || (apt==*end-) || (apt==*end))
{
printf("%.1lf\n",minn);
return;
}
else
{
used[apt]=true; ans[apt]=minn;
}
// }
}
}
void rf()//读入+根据平面内三点,求出第四个点的坐标。
{
int i;
int x,x1,x2,x3,y1,y2,y3,y;
scanf("%d%d%d%d",&n,&vf,&start,&end);
if (start==end)
{
printf("%.1lf",0.0);
return;
}
else
for (i=;i<=n;i++)
{
scanf("%d%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3,&vn[i]);
x=x1+x2-x3; y=y1+y2-y3;
if (dist(x1,y1,x2,y2)!=dist(x3,y3,x,y))
{
x=x1+x3-x2;
y=y1+y3-y2;
if (dist(x1,y1,x3,y3)!=dist(x2,y2,x,y))
{
x=x2+x3-x1;
y=y2+y3-y1;
}
}
map[i*-][]=x1; map[i*-][]=y1;
map[i*-][]=x2; map[i*-][]=y2;
map[i*-][]=x3; map[i*-][]=y3;
map[i*][]=x; map[i*][]=y;
}
dijistra();
} int main()
{
int i;
scanf("%d",&s);
for (i=;i<=s;i++)
{
memset(map,,sizeof(map));
//memset(ans,0,sizeof(ans));
rf();
}
return ;
}

【CodeVS】P1041 car的旅行路线的更多相关文章

  1. NOIP2001 Car的旅行路线

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

  2. [NOIP2001提高组]CODEVS1014 Car的旅行路线(最短路)

    最短路,这个不难想,但是要为它加边就有点麻烦..还好写完就过了(虽然WA了一次,因为我调试用的输出没删了..),不然实在是觉得挺难调的.. ------------------------------ ...

  3. GDOI2015小Z的旅行路线

    GDOI2015小Z的旅行路线 题意: \(n\)个点的无根树,边上有权值. \(q\)个询问\(s\)和\(s\),问从\(s\)出发,找一条最长路(不经过重复点),保证路径上所有边边权不超过\(x ...

  4. 【Foreign】旅行路线 [倍增]

    旅行路线 Time Limit: 20 Sec  Memory Limit: 256 MB Description Input Output 仅一行一个整数表示答案. Sample Input 3 2 ...

  5. 洛谷P1027 Car的旅行路线

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

  6. 洛谷 P1027 Car的旅行路线

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

  7. AC日记——Car的旅行路线 洛谷 P1027

    Car的旅行路线 思路: 这题不难,就是有点恶心: 而且,请认真读题目(就是题目卡死劳资): 来,上代码: #include <cmath> #include <cstdio> ...

  8. codevs 1450 xth 的旅行

     时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 毕业了,Xth很高兴,因为他要和他的 ra ...

  9. P1027 car的旅行路线

    car的旅行路线 洛谷链接 这个题关键就是 如何把每个点表示出来,其实求出四个点的坐标后,只需要把这些点连接起来,用一遍folyed求出最短路径就好了. 代码: #include<cmath&g ...

随机推荐

  1. ASP.NET Web API中使用GZIP 或 Deflate压缩

    对于减少响应包的大小和响应速度,压缩是一种简单而有效的方式. 那么如何实现对ASP.NET Web API 进行压缩呢,我将使用非常流行的库用于压缩/解压缩称为DotNetZip库.这个库可以使用Nu ...

  2. 三、spinner

    今天 ,看的和学的都不多,就弄了一个spinner控件而已,下面就记录一下spinner 用法吧 基本上说,使用spinner 有三个步骤 一.在布局文件里面设置spinner 控件,这个不用再多说了 ...

  3. AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(三):配置ActiveXForm运行环境

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  4. java BigInteger使用

    虽然说我不怎么会用java写一些东西,但是java里的biginteger我还是很喜欢的.这个类解决了,我们在其他很多语言中遇到的问题:大数.比如在C++中我们要计算一个大小超过long long的数 ...

  5. 在source insight中集成astyle

    转自:http://www.cnblogs.com/xuxm2007/archive/2013/04/06/3002390.html 好吧,我有代码格式的强迫症,代码不整齐,我看的都头疼,之前一直喜欢 ...

  6. Windows phone 8.0 本地化遇到的两个问题

    基本上来说,按照msdn来讲的,本地化和全球化没有太多的问题,链接如下: http://msdn.microsoft.com/zh-cn/library/windowsphone/develop/ff ...

  7. jdk 1.8 Executors

    Class Executors java.lang.Object java.util.concurrent.Executors public class Executors extends Objec ...

  8. JAVA Day6

    1.对象:用来描述客观事物的一个实体,由一组属性和方法组成 2.属性--对象具有的各种特征    *每个对象的每个属性都拥有特定值    *例如:张浩和李明的年龄.姓名不一样 3.方法--对象执行的操 ...

  9. hdu5092 dp(递推)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5092 题意:给一个m*n的矩阵,找到一个纵向的"线"使得线上的和最小并 ...

  10. 解决Kali Linux没有声音

    解决Kali Linux没有声音   Kali Linux系统默认状态下,root用户是无法使用声卡的,也就没有声音.启用的方法如下: (1)在终端执行命令:systemctl --user enab ...