文章

74

粉丝

0

获赞

98

访问

9.0k

头像
最短距离 题解(一元二次方程抛物线):
P1679 中南大学机试题
发布于2025年8月10日 18:15
阅读数 127

#include<bits/stdc++.h>
using namespace std;

double minDistance(){
	int x1, y1, x2, y2;
	cin >> x1 >> y1 >> x2 >> y2;
	int u1, v1, u2, v2;
	cin >> u1 >> v1 >> u2 >> v2;
	
	int x = x1 - x2;
	int u = u1 - u2;
	int y = y1 - y2;
	int v = v1 - v2;
	
	int a = (u*u + v*v);
	int b = 2*(u*x + v*y);
	int c = (x*x + y*y);
	
	double mid = -1.0*b/(2*a); // 一元二次抛物线对称轴
	
	if(mid < 0) return sqrt(c); // 取时刻为0时距离最小
	else return sqrt(c - (pow(b/2,2) / a)); // 取时间为mid时距离最小
	
}

int main(){
	
	int t; cin >> t;
	
	int cnt = 0;
	while(t --){
		cnt ++;
		printf("Case %d: %.6lf\n", cnt, minDistance());
	}
	
	return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发