題目鏈接:見這里 題意:開始每個人都在一條數軸上的某個位置上,位置大于等于1都是整數,每個人有個最大移動速度,為在數軸上面哪個點集合,所用的集合時間最短,求這個時間,集合地點可以不是整數。 解法:3分位置然后求極值。check就是對于每個位置,每個人以最大速度跑到的時間的最大值
#include <bits/stdc++.h>using namespace std;const int maxn = 6e5+10;int n;double x[maxn], v[maxn];double check(double p){ double t = 0; for(int i = 1; i <= n; i++) t = max(t, fabs(x[i] - p) / v[i]); return t;}int main(){ scanf("%d", &n); for(int i = 1; i <= n; i++) cin >> x[i]; for(int i = 1; i <= n; i++) cin >> v[i]; double l = 0, r = 1e10; int t = 1000; while(t--){ double mid = (l + r) / 2; double midd = (mid + r) / 2; if(check(mid) < check(midd)) r = midd; else l = mid; }新聞熱點
疑難解答