P1027 Car的旅行路线

P1027 [NOIP2001 提高组] Car 的旅行路线 题解 接下来有 𝑆S 行,其中第 𝑖i 行均有 77 个正整数𝑥𝑖1,𝑦𝑖1,𝑥𝑖2,𝑦𝑖2,𝑥𝑖3,𝑦𝑖3,𝑇𝑖xi1​,yi1​,xi2​,yi2​,xi3​,yi3​,Ti​,这当中的 (𝑥𝑖1,𝑦𝑖1),(𝑥𝑖2,𝑦𝑖2),(𝑥𝑖3,𝑦𝑖3)(xi1​,yi1​),(xi2​,yi2​),(xi3​,yi3​),分别是第 𝑖i 个城市中任意 33 个机场的坐标,𝑇𝑖Ti​ 为第 𝑖i 个城市高速铁路单位里程的价格。𝑆S 表示城市的个数,𝑡t 表示飞机单位里程的价格,𝐴A,𝐵B 分别为城市A,B 的序号。 阅读详情

https://www.luogu.org/problemnew/show/P1027

这个题我一看认为是个裸的最短路(后来发现的确是个裸的最短路emmm)。但是,对于每一个地方,你只知道三个机场的坐标,另外一个你得根据其他三个机场的坐标和“四个机场呈矩形”这几个条件去确定。

好了,下面来一发高中数学。

当前需要解决的问题:已知点A,B,C,D确定一个矩形,给定点A,B,C的坐标,求点D的坐标。

我们可以暴力枚举这个矩形的长和宽可能由那些点确认。即暴力枚举由当前点A,B,C可构成的两条矩形的边交于这三个点中的哪个点。假设交于点A。如果(以下直线的斜率用k表示)k_{l_{(A,B)}}k_{l_{(A,C)}}=-1,则说明这个方案是合法的。同理也可推广到交于点B或点C的情况。

确定完构成矩形的两条边后,我们应该如何确定点D呢?

把矩形的两条对边看作为两条向量A,B(不知道它们的方向),那么< A,B> =0/\pi。

利用这个性质,我们随便拿出之前由两个点(假设这两个点为A,B,当前确定的两个边交于B)确定的一条边, 指定方向为B->A后算出这个向量的横纵坐标,然后以点C为参照,作向量C->D。向量C->D=B->A。这样我们就确定完了。

确定完所有飞机场的坐标后。我们在同一个城市间的飞机场连边权=铁路单位费用*距离的边,不同城市间的飞机场连边权=航线单位费用*距离的边,以起点城市的四个城市为源点跑四遍最短路,每次跑完后拿当前源点与终点的四个飞机场的距离更新答案即可。

最后注意输出答案的小细节啊emmm(1.保留一位小数的处理公式;2.输出精确位数的小数时用printf函数输出(不能用cout直接输出"cout<<(某个数)"))。

Code:

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<queue>
#define ri register int
using namespace std;

const int MAXN=160020;
const double INF=1e18;
int tz,n,m,s,t,u[MAXN],v[MAXN],fst[MAXN],nxt[MAXN];
double wf,x[MAXN],y[MAXN],wt[MAXN],w[MAXN],fm[10],fz[10],nowx[10],nowy[10],dis[MAXN],ans;
bool book[MAXN];

double dist(int a,int b)
{
	return sqrt((x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b]));
}

void clean()
{
	m=0,ans=INF;
	memset(fst,0,sizeof(fst));
	memset(nxt,0,sizeof(nxt));
	memset(book,0,sizeof(book));
}

struct node{
	int num;
	double c;
};
priority_queue<node>Q;
bool operator<(const node &a,const node &b)
{
	return a.c > b.c;
}

void Dijkstra(int s)//跑最短路 
{
	memset(book,0,sizeof(book));
	for(ri i=1;i<=n;i++)	dis[i]=INF;
	dis[s]=0;
	Q.push((node){s,0});
	while(!Q.empty())
	{
		int nowx=Q.top().num; Q.pop();
		if(book[nowx])  continue;
		book[nowx]=1;
		for(ri k=fst[nowx];k>0;k=nxt[k])
		{
			if(dis[v[k]]>dis[u[k]]+w[k])
			{
				dis[v[k]]=dis[u[k]]+w[k];
				Q.push((node){v[k],dis[v[k]]});
			}
		}
	}
}

void mathmatic(int num)//利用解析几何根据三点确定一点 
{
	for(ri i=1;i<=3;i++)
	{
		int cnt=0;
		for(ri j=1;j<=3;j++)
		{
			if(j==i)  continue;
			cnt++;
			fm[cnt]=x[(num-1)*4+i]-x[(num-1)*4+j],nowx[cnt]=x[(num-1)*4+j];
			fz[cnt]=y[(num-1)*4+i]-y[(num-1)*4+j],nowy[cnt]=y[(num-1)*4+j];
		}
		if((fm[1]==0&&fz[2]==0)||(fm[2]==0&&fz[1]==0))
		{
			double lx=x[(num-1)*4+i]-nowx[1],ly=y[(num-1)*4+i]-nowy[1];
			x[num*4]=nowx[2]-lx,y[num*4]=nowy[2]-ly;
			break;			
		}
		if((fm[1]*fm[2])/(fz[1]*fz[2])==-1)
		{
			double lx=x[(num-1)*4+i]-nowx[1],ly=y[(num-1)*4+i]-nowy[1];
			x[num*4]=nowx[2]-lx,y[num*4]=nowy[2]-ly;
			break;
		}
	}
}

void build()//建图 
{
	for(ri i=1;i<=n*4;i++)
		for(ri j=1;j<=n*4;j++)
		{
			++m;
			u[m]=i,v[m]=j;
			if((i-1)-(i-1)%4==(j-1)-(j-1)%4)  w[m]=dist(i,j)*wt[i];
			else  w[m]=dist(i,j)*wf;
			nxt[m]=fst[u[m]],fst[u[m]]=m;
		}	
}

void work()
{
	clean();
	scanf("%d%lf%d%d",&n,&wf,&s,&t);
	for(ri i=1;i<=n;i++)	
	{
		for(ri j=1;j<=3;j++)  
			scanf("%lf%lf",&x[(i-1)*4+j],&y[(i-1)*4+j]);
		scanf("%lf",&wt[(i-1)*4+1]);
		for(ri j=2;j<=4;j++)	wt[(i-1)*4+j]=wt[(i-1)*4+1];
		mathmatic(i);
	}
	build();
	n*=4;
	for(ri i=1;i<=4;i++)
	{
		Dijkstra((s-1)*4+i);
		for(ri j=1;j<=4;j++)  ans=min(ans,dis[(t-1)*4+j]);
	}
	printf("%.1f",floor(ans*10+0.5)/10);
	//当明确规定输出多少位小数时最好用printf函数输出 
}

int main()
{
	scanf("%d",&tz);
	for(ri i=1;i<=tz;i++)	work();
	return 0;
}

 

YOLOv11改进策略【独家融合改进】| MobileNetV4+BiFPN,轻松实现降参涨点,适用专栏内所有的骨干替换 可扩展的高效物体检测BiFPN(加权双向特征金字塔网络) 阅读详情

相关推荐

支付系统保证可靠性的秘诀 ----- 订单的补偿和补单

文章目录WHAT? 前言WHY? 为什么要用多级缓存?HOW 怎么做?方案 版本1:数据库存储专线配置通过优先级进行动态上下线方案 版本1 劣势:方案 版本2 :本地缓存替代数据库方案 版本2 劣势:方案 版本3:分布式缓存做自动补偿方案 版本3 总结:Where 分布式多级缓存还能用在哪些地方?总结 WHAT? 前言 刚入职场的时候觉得支付宝等第三方支付系统好强大,要保证这么多的交易不能错,也不能重复还要保证正确的扣钱,直到后面接触订单系统以及第三方支付公司的核心交易系统后才真正窥探到了支付系统的核心

boboaisisi的专栏 3534

Car的旅行路线

题目 https://www.luogu.org/problemnew/show/P1027 思路 本题我们不妨把每个城市的4个机场看做四个点。那样这图就有4 \times s4×s 个点。 根据题目描述,我们又知道:每一个机场都与另外每一个机场互通,差别只是在是否是同一个城市: 如果是,那么只能走高速铁路; 如果不是,那么只能走航道。用一个判断来计算这条路的花费即可。 最后跑最短路,答案为到达城...

Brute♂force 673

windows版kafka异常java.nio.file.FileSystemException另一个程序正在使用此文件,进程无法访问

环境 现象 原因 解决方法 参考

山水牧羊 3847

洛谷 Car的旅行路线 p1027 spfa

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游。她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路,第I个城市中高速铁路了的单位里程价格为Ti,任意两个不同城市的机场之间均有航线,...

Wu_yux的博客 396

Echarts之风力风速玫瑰图

风力风速玫瑰图前言改进之路代码如下总结导出与导入 前言 今天上班收到任务,我们老大让我研究一下这个“风速风向玫瑰图”,还说这个是百度的雷达图的变异体,于是乎我直接找的雷达图,但是雷达图没有这种柱形的,都是点线,然后我又找了好久,最后突然在echarts官网上面看到了图1-2,才终于有了思路,原来这个图不是雷达图的变异体,而是极坐标系下的堆叠柱状图,于是就开始我的“改进”之路了。 图1-1 改进之路...

qq_38776605的博客 1万+

CMOS图像传感器——工作原理

CMOS图像传感器的曝光与读出

沧海一升的博客 9459

[NOIP2001 提高组] Car 的旅行路线 题解

本文讲解 [NOIP2001 提高组] Car 的旅行路线 题解,一道普及+/提高的题。

本人没什么优点,唯一的优点就是有一个优点。 518

Openclaw错误分析与解决方案之:Agent couldn’t generate a response.

Openclaw错误分析与解决方案之:Agent couldn't generate a response. Note: some tool actions may have already been executed — please verify before retrying.

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 1316

洛谷P1027Car的旅行路线题解--zhengjun

题目描述 又到暑假了,住在城市 AAA 的 CarCarCar 想和朋友一起去城市旅游。 她知道每个城市都有 444 个飞机场,分别位于一个矩形的 444 个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路,第 iii 个城市中高速铁路了的单位里程价格为 TiT_iTi​ ,任意两个不同城市的机场之间均有航线,所有航线单位里程的价格均为 ttt。 图例(从上而下) 机场 高速铁路 飞机航线 ...

A_zjzj的博客 726

电力负荷预测 | 电力系统负荷预测模型(Python线性回归、随机森林、支持向量机、BP神经网络、GRU、LSTM)

电力负荷预测 | 电力系统负荷预测模型(Python线性回归、随机森林、支持向量机、BP神经网络、GRU、LSTM)

天天酷科研的博客 3188

uniapp - 详解APP端免费人脸识别+人脸核身+人脸对比+活体检测插件功能完整源码,uniAPP纯前端实现不依赖后端API接口或第三方付费人脸识别功能示例(仅兼容安卓app与苹果ios App)

uniapp免费人脸认证功能,uniapp APP开发活体人脸识别,UniApp人脸识别与活体检测,人脸核身uni-app插件 活体检测 人脸对比 人脸识别 人脸认证 身份证件,uni-app人脸核身,如何在app端实现免费人脸识别教程,人脸核身uni-app插件活体检测,uniapp安卓ios百度人脸识别、活体检测、人脸采集APP原生插件,详细实现人脸识别和活体检测功能,实时监测人脸是否进入区域及动作是否正确播报,提供提供实名认证、身份证识别、有没有免费的,api,活体检测,人脸信息采集、刷脸扫脸认证示例

🏆 前端领域优质创作者 4382

P1027 [NOIP2001 提高组] Car 的旅行路线

P1027 [NOIP2001 提高组] Car 的旅行路线 1、每个城市有四个点,N 个城市有4N个点,我们对这4N个点进行floyed,这就是我们最终的结果 2、根据三个点判断出第四个点的坐标: 千万注意斜率不为零的情况分开讨论!!0不能做除数 void add(int cnt){ int x1,x2,x3,y1,y2,y3; x1 = city[cnt-2].x; x2 = city[cnt-1].x; x3 = city[cnt].x; y1 = city[cnt-2].y; y2 =

daq0411的博客 909

YOLO26全网首发:CVPR2026 MixerCSeg | DEGConv方向引导边缘门控,破解细长裂缝检测难题

DEGConv通过方向先验嵌入、边缘增强卷积和动态门控三大机制,针对性解决了YOLO在处理裂缝类细长、多方向、低对比度目标时的特征提取不足问题,显著提升了裂缝检测的精度与鲁棒性。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1034

洛谷P1027(Car的旅行路线)

洛谷P1027(P1027 Car的旅行路线)题目描述输入格式输出格式解题思路代码 题目描述 又到暑假了,住在城市 A 的 Car 想和朋友一起去城市旅游。 她知道每个城市都有 4 个飞机场,分别位于一个矩形的 4 个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路,第 i 个城市中高速铁路了的单位里程价格为 TiT_iTi​,任意两个不同城市的机场之间均有航线,所有航线单位里程的价格均为 t。 那么 Car 应如何安排到城市B的路线才能尽可能的节省花费呢?她发现这并不是一个简单的问题,于是她来向你请教

ly3098268698的博客 719

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

洛谷P1027 Car的旅行路线

P1027 Car的旅行路线 转载于:https://www.cnblogs.com/thmyl/p/7359309.html

weixin_30474613的博客 117

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【题解】洛谷P1027 Car的旅行路线

题目 洛谷P1027 Car的旅行路线 题解 此题要求最短路。题中的机场代表点,但有部分点的坐标没有给出,需要运用几何知识求出。此题的存点方式有一定技巧,序号为i的城市的机场下标为4*i,4*i+1,4*i+2,4*i+3,这样可以将城市与机场的编号关联起来。 代码 #include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=500; const dou

zjgmartin的博客 304

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

洛谷 P1027 Car的旅行路线

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

weixin_30270561的博客 122

c++题目_P1027 [NOIP 2001 提高组] Car 的旅行路线

接下来有 $S$ 行,其中第 $i$ 行均有 $7$ 个正整数$x_{i1},y_{i1},x_{i2},y_{i2},x_{i3},y_{i3},T_i$,这当中的 $(x_{i1},y_{i1}), (x_{i2},y_{i2}), (x_{i3},y_{i3})$,分别是第 $i$ 个城市中任意 $3$ 个机场的坐标,$T_i$ 为第 $i$ 个城市高速铁路单位里程的价格。$S$ 表示城市的个数,$t$ 表示飞机单位里程的价格,$A$,$B$ 分别为城市A,B 的序号。**【题目来源】**

曾梦想仗剑走天涯,梦想AK天下WA 475

洛谷——P1027 Car的旅行路线

https://www.luogu.org/problem/show?pid=1027#sub 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游。她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路,第I个城市中高速铁路了的单位里程价格为Ti,任意两个不同城市的机场之间均有航线,所有航线单位里程的价格均为t。 ...

agcozdwdfvds08078的博客 137

luogu 题解:P1027 [NOIP 2001 提高组] Car 的旅行路线

剩下的很显然,计算同一个矩形中两点间的“高速公路”的边权并记录,计算不同矩形的两点间的“航线”的边权并记录,跑 floyd 即可,最后枚举起点与终点的状态。但是由于题目只给出了矩形的三个顶点的坐标,第四个顶点应该自己计算。声明:为了提高代码可读性,此代码采用了 AI 重构。个点,考虑用邻接表、floyd 算法解决此题。一种很显然的做法,注意到数据规模。种不同的状态(矩形的四个顶点)。考虑拆点,拆点后最多只有。,在一座城市中最多有。

weixin_70116074的博客 1019

洛谷 P1027 Car的旅行路线

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

苦鬼·。 394

P1027 Car的旅行路线 (SPFA)

题目描述 又到暑假了,住在城市AAA的CarCarCar想和朋友一起去城市BBB旅游。她知道每个城市都有444个飞机场,分别位于一个矩形的444个顶点上,同一个城市中222个机场之间有111条笔直的高速铁路,第III个城市中高速铁路了的单位里程价格为TiT_iTi​,任意两个不同城市的机场之间均有航线,所有航线单位里程的价格均为ttt。 图例(从上而下) 机场 高速铁路 飞机航线  ...

Helloirbd的博客 358
上一篇: P1462 通往奥格瑞玛的道路
下一篇: CF1068B LCM
guapi2333
博客等级 码龄9年 7粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值