P1027 car的旅行路线
car的旅行路线
这个题关键就是
如何把每个点表示出来,其实求出四个点的坐标后,只需要把这些点连接起来,用一遍folyed求出最短路径就好了。
代码:
#include<cmath>
#include<cstdio>
int x[],y[];//x表示横坐标,y表示纵坐标
int ti[];//在第i个城市中铁路单位里程价格
int n,s,tt,a,b;//tt表示航线单位里程价格
double d[][];//i到j的长度(花费)
void doit(int t1,int t2){//计算t1到t2的花费
d[t1][t2]=sqrt((x[t1]-x[t2])*(x[t1]-x[t2])
+(y[t1]-y[t2])*(y[t1]-y[t2]));//求t1到t2的长度
if (((t1-)/)==((t2-)/)){//判断t1,t2是否在同一个城市内
d[t1][t2]=d[t1][t2]*ti[(t1-)/+];//计算花费
}else
d[t1][t2]=d[t1][t2]*tt;
d[t2][t1]=d[t1][t2];//对称
return;//结束
}
int find(int t1,int t2,int t3){//找直角三角形斜边
//如果一边长度大于任意两边返回此边对着的点
if((d[t1][t2]>d[t2][t3])&&(d[t1][t2]>d[t3][t1])) return t3;
//t1t2对应的点为t3
if((d[t2][t3]>d[t1][t2])&&(d[t2][t3]>d[t3][t1])) return t1;
//t2t3对应的点为t1
if((d[t3][t1]>d[t2][t3])&&(d[t3][t1]>d[t1][t2])) return t2;
//t1t3对应的点为t2
}
void doit2(int t1,int t2,int t3){
doit(t1,t2);//t1到t2的花费(比在同一城市)
doit(t2,t3);//t2到t3的花费(必在同一城市)
doit(t3,t1);//t3到t1的花费(必在同一城市)
int haha=find(t1,t2,t3);//找此直角三角形的斜边
//而在平行四边形中
//一条边的两个顶点的横(或纵)坐标的差值
//等于其对边两个顶点的横(或纵)坐标的差值
if(haha==t1){//看斜边对着的点为哪个,并求出第4个点的坐标
x[t3+]=x[t3]+x[t2]-x[t1];
y[t3+]=y[t3]+y[t2]-y[t1];
}
else if(haha==t2){
x[t3+]=x[t3]+x[t1]-x[t2];
y[t3+]=y[t3]+y[t1]-y[t2];
}
else if(haha==t3){
x[t3+]=x[t1]+x[t2]-x[t3];
y[t3+]=y[t1]+y[t2]-y[t3];
}
}
int main(){
scanf("%d",&n);
for(;n>=;n--){//循环运行n次
scanf("%d %d %d %d",&s,&tt,&a,&b);
//S城市数,t飞机单价,A,B序号
int i,j,k;
for(i=;i<=;i++)//初始化
for(j=;j<=;j++)
d[i][j]=;
for(i=;i<=s;i++){
scanf("%d%d%d%d%d%d%d",
&x[*i-],&y[*i-],&x[*i-],
&y[*i-],&x[*i-],&y[*i-],
&ti[i]);
doit2(*i-,*i-,*i-);
}
for(i=;i<=*s;i++)
for(j=;j<=*s;j++)
doit(i,j);//计算i到j的花费
for(k=;k<=*s;k++)
for(i=;i<=*s;i++)
for(j=;j<=*s;j++)
if(d[k][j]+d[i][k]<d[i][j])
d[i][j]=d[k][j]+d[i][k];//Floyed
double ans=200000000.0;
for(i=*a-;i<=*a;i++)
for(j=*b-;j<=*b;j++)
if(d[i][j]<ans)
ans=d[i][j];//更新最小值
printf("%.1lf\n",ans);//输出,并保留一位小数
}
return ;
}
P1027 car的旅行路线的更多相关文章
- 洛谷P1027 Car的旅行路线
洛谷P1027 Car的旅行路线 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速 ...
- 洛谷 P1027 Car的旅行路线
P1027 Car的旅行路线 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路 ...
- 洛谷 P1027 Car的旅行路线 最短路+Dijkstra算法
目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P1027 Car的旅行路线 题目描述 又到暑假了,住在 ...
- [最短路][部分转]P1027 Car的旅行路线
题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路,第I个城市中高速铁路了的单位 ...
- luogu P1027 Car的旅行路线
题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路,第I个城市中高速铁路了的单位 ...
- [NOIP2001] 提高组 洛谷P1027 Car的旅行路线
题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个 矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路,第I个城市中高速铁路了的单 ...
- 洛谷——P1027 Car的旅行路线
https://www.luogu.org/problem/show?pid=1027#sub 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于 ...
- AC日记——Car的旅行路线 洛谷 P1027
Car的旅行路线 思路: 这题不难,就是有点恶心: 而且,请认真读题目(就是题目卡死劳资): 来,上代码: #include <cmath> #include <cstdio> ...
- Car的旅行路线 luogu P1027 (Floyd玄学Bug有点毒瘤)
luogu题目传送门! Car的旅行路线 问题描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一 ...
随机推荐
- 搜狐前端css常用命名
- Oracle及其相关软件历史版本下载地址
https://edelivery.oracle.com/osdc/faces/Home.jspx 打开上面这个链接,输入自己或可用的帐号即可. 搜索到自己想要下载的软件后,点击,软件会添加到购物车中 ...
- poj3280 Cheapest Palindrome
思路: 区间dp.添加和删除本质相同. 实现: #include <iostream> #include <cstdio> using namespace std; int n ...
- ES6学习笔记(4)----正则的扩展
参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ 正则的扩展 ES6新增的正则表达式修饰符 u修饰符a.能够更准确地匹配unicode大于\uFF ...
- android studio 定时器操作 实现定时执行相关任务
package ipget.wenzheng.studio.ipget; import android.os.Bundle; import android.os.Handler; import and ...
- 洛谷 P2153 [SDOI2009]晨跑
题目描述 Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现在给出一张学校附近的地图,这张地图中包含N个十字路口和M条街 ...
- 一行命令杀掉defunct进程
一行命令杀掉defunct进程 今天在杀掉defunc过程中一直搞不完,索性写一行命令,注意先看懂谨慎使用 ps -ef|grep defunct|awk '{print " ps -ef| ...
- nvidia 的一些命令
直接在命令行使用 NVIDIA-smi会有问题 首先要确保电脑下了cuda. 然后打开cmd,使用cd命令进入: C:\Program Files\NVIDIA Corporation\NVSMI 然 ...
- gocode安装不上的解决办法
mkdir -p $GOPATH/src/golang.org/x //路径下创建此文件 cd $GOPATH/src/golang.org/x //切换到此目录 git clone ht ...
- DLL动态库多次加载问题
原因涉及DLL加载和运行机制,主要有两点:1)DLL动态链接库无法独立运行,必须由一个应用程序进程加载到进程空间后才能使用.加载DLL的进程称为宿主进程.被加载的DLL属于宿主进程,不属于宿主进程内某 ...