Content
平面上有 \(A_1(x_1,y_1),A_2(x_2,y_2),...,A_n(x_n,y_n)\) 共计 \(n\) 个点。你需要依次将 \(A_1\) 连接至 \(A_2\),\(A_2\) 连接至 \(A_3\),以此类推,直到将 \(A_{n-1}\) 连接至 \(A_n\) 为止。每次连接的长度即为连接的两个点之间的距离。你需要在 \(k\) 个相同的平面上完成这样的操作,已知你连接的速度为 \(50\) 个单位每秒,求完成所有的连接操作需要的时间。
数据范围:\(2\leqslant n\leqslant 100,1\leqslant k\leqslant 1000\)。
Solution
每次将线段的长度除以 \(50\) 累加进去,这样就不需要再在最后还要除以一个 \(50\)。最后记得答案再乘上 \(k\)。总之不是很难。
贴个两点之间的距离公式吧:\(dis(A,B)=\sqrt{(x_A-x_B)^2+(y_A-y_B)^2}\)
Code
#include <cstdio>
#include <cmath>
using namespace std;
int n;
double ans, x[107], y[107], k;
double dist(int i, int j) {
return sqrt((x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j])) / 50.0;
}
int main() {
scanf("%d%lf", &n, &k);
for(int i = 1; i <= n; ++i) scanf("%lf%lf", &x[i], &y[i]);
for(int i = 1; i < n; ++i) ans += dist(i, i % n + 1);
printf("%.9lf", ans * k);
}