Osu! 遊戲中,N 個點依次出現,點 i 在時間 t_i 位置 (x_i, y_i)。跳躍難度 = 相鄰兩點距離 / 時間差。求整場遊戲的最大難度。N ≤ 1000,t ≤ 10^6。
直接遍歷計算相鄰點難度,取最大值:
ans = max( sqrt((x_i-x_{i-1})² + (y_i-y_{i-1})²) / (t_i - t_{i-1}) )
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
const int MAXN = 1010;
long long t[MAXN];
double x[MAXN], y[MAXN];
int main() {
int T, n;
cin >> T;
while (T--) {
cin >> n;
for (int i = 0; i < n; i++) cin >> t[i] >> x[i] >> y[i];
double ans = 0;
for (int i = 1; i < n; i++) {
double dx = x[i] - x[i-1];
double dy = y[i] - y[i-1];
double dist = sqrt(dx*dx + dy*dy);
double diff = t[i] - t[i-1];
ans = max(ans, dist / diff);
}
printf("%.10f\n", ans);
}
return 0;
}
O(N) 每測試用例,極快。