CodeForces 44D-C - Hyperdrive-暴力

本文介绍了一道算法题的解决思路,通过分析飞船在三维空间中的运动轨迹,提出了解决任意两个飞船相撞最短时间的问题的方法。利用三角形模型简化了碰撞情况,并给出了具体的实现代码。

http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=20073

题意:

给你n个星球的三维坐标,   从第一个星球出发,发射n-1个飞船

当第i个飞船到达第 i 个星球时,他会在上面造 n-2个 飞船,往其他星球发射, 同理 第j个到第j个星球也会造n-2个飞船做同样的事

当第i个星球造的飞船到达新的星球,他会造 n-3个飞船继续传播。。。。。

求任意两个飞船相撞的最短时间

飞船的路线都是直线。

由于题目说了不存在三点共面,那么 飞船是不可能交叉碰撞的, 例如 星1发往星3 的飞船 永远不会跟 星2 发往星3的飞船 碰撞, 因为如果发生了,必然存在 一个面使得星1 2 3 共面,不合要求;


那么碰撞的情况只有两种,一是两个飞船同时到达一个星球,  二是星1往星3发飞船,星3也往星1发飞船,他们在中间的过程碰撞;

【当第一个星球发射n-1个飞船到n-1个星球时,每个收到飞船的星球必然 往其他n-2个星球发飞船,也就是说 碰撞一定发生在这第二次发射中】

【那么我们可以转化为三角形模型】





可以看到  颜色相同的箭头表示 距离相等的一段路程, 显然 最终星2与星3 碰撞的 时间就是 【橙色+蓝色+黄色】   (本题距离就是速度.的...大小)

设星一到三的距离为 dis3 ,一到二的距离为dis2   二到三的距离为dis4

那么可知   对星1发射到 星2、3 到碰撞所需的时间为  【橙色+蓝色+黄色】 也即是

【橙色+蓝色 即 max(dis3,dis2)】+【黄色 即 [dis4- fabs(dis3-dis2)]/2】 


所以暴力求出所有星球的距离,用公式求一个最小的答案就好了

#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <queue>
#include <map>
#include <set>
#include <vector>
using namespace std;
struct node
{
	double a,b,c;
};
double max(double a,double b)
{return a<b?b:a;}
double min(double a,double b)
{return a>b?b:a;}
node tm[5005];
 
double one_2[5005]; 
const double inf= 2147483647.0;
int main()
{
	double a,b,c;
	int n;
	int i,j;
	scanf("%d",&n);
	for (i=1;i<=n;i++)
	{
		scanf("%lf%lf%lf",&tm[i].a,&tm[i].b,&tm[i].c);
	}
	double a1=tm[1].a;
	double b1=tm[1].b;
	double c1=tm[1].c;
	double dis_pow2;
	for (j=2;j<=n;j++)
	{ 
		double a2=tm[j].a;
		double b2=tm[j].b;
		double c2=tm[j].c;
		dis_pow2=sqrt((a1-a2)*(a1-a2)+(b1-b2)*(b1-b2)+(c1-c2)*(c1-c2));
		one_2[j]=dis_pow2;
	}
	double  ans=inf;
//	sort(one_2+2,one_2+1+n,cmp);
	int id;
	double dis2;
	for (id=2;id<=n;id++)
	{
		double dis1=one_2[id];
	//	int id=one_2[2].num;
		a1=tm[id].a;
		b1=tm[id].b;
		c1=tm[id].c;
		for (j=2;j<=n;j++)
		{ 
			if (j==id) continue;
			double a2=tm[j].a;
			double b2=tm[j].b;
			double c2=tm[j].c;
			dis2=sqrt((a1-a2)*(a1-a2)+(b1-b2)*(b1-b2)+(c1-c2)*(c1-c2));
			double cha=fabs(dis1-one_2[j]);
			ans=min(ans,dis1+(cha+dis2)/2);
		}
	} 

	printf("%.7lf\n",ans);
	return 0;
	
}


 

内容概要:本文系统地分析了CAN总线通信中常见的丢帧问题,涵盖接收丢帧、发送丢帧和普通路由丢帧三大类场景,并深入剖析了由CAN邮箱(MB)内容概要:资源限制、中断本文系统地处理时间过长分析了在使用CAN、总线负载总线过程中常见的过高及刷新过程丢帧问题,涵盖接收丢帧、发送等因素引发丢帧的根本丢帧和普通原因。文章提供了路由丢帧三大场景,并深入剖析其具体的调试方法与成因,重点优化措施,如讲解了CAN邮箱合理分配MB资源(MB)资源限制、、启用硬件F中断处理时间过长IFO、优化软件、刷新过程等因素滤波算法、使用导致的丢帧原理CanIf发送缓冲机制。文章提供了具体的(CanIfPublicTxBuffering或调试方法和优化措施,如合理CanIfPrivateTxSwF分配MB资源、启用ifoSupport)、缩短中断处理时间等硬件FIFO、优化软件滤波算法,结合实际案例(如邦泰项目、采用CanIf)验证了解决方案的有效发送缓冲机制(性。; CanIfPublicTxBuffering或CanIfPrivate适合人群:从事TxSwFifoSupport汽车电子开发、)、配置报文偏ECU通信集成移等,帮助、AUTOSAR架构开发者定位并解决开发的工程师,尤其是实际项目中的CAN具备CAN通信基础通信稳定性问题。;、工作年限1 适合人群:从事-3年的研发汽车电子开发、人员;也适用于需要嵌入式系统开发解决CAN丢帧问题的,具备一定CAN测试与系统工程师总线和AUTOSAR基础,。; 使用工作年限1-3场景及目标:年的研发工程师;①定位并解决尤其适用于参与ECCAN通信中的丢帧U通信集成与故障;②优化调试的技术人员。CAN驱动与上; 使用场景及目标:①用于层模块(如CanIf、Com排查和解决CAN)的配置以通信中因资源提升通信可靠性;③竞争、中断延迟在高负载或刷新场景下保障或配置不当引起的丢帧故障;CAN报文实时②指导在高性与完整性; 负载或CAN FD阅读建议:此资源侧重于工程环境下优化CAN驱动与上层模块实践与底层机制分析,建议读者(如CanIf、结合具体项目中的Com)的资源配置CAN配置工具(与参数设置,如EB Tres提升通信可靠性;os)、芯片手册③辅助进行AUTOSAR架构下以及实际抓波数据进行对照学习,并在调试过程中CAN模块的性能调优逐步应用文中提出的。; 阅读建议:此资源优化策略,重点关注以实际工程案例为基础,MB分配、中断结合理论分析与性能与缓冲机制解决方案,建议读者的设计。结合自身项目中的CAN配置工具(如EB Tresos)进行对照实践,重点关注MB分配策略、中断处理路径优化及缓冲机制的选择,并通过添加调试计数器等方式验证问题节点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值