正文
挺好想的,答案就是一个圆的周长加各条边的和。
因为第n
条边到第1
条边比较难计算,所以提前拿出来计算。
#include <cmath>
#include <cstdio>
struct Point {
double x;
double y;
}point[105];
int n;
double r;
const double pi = 3.1415926535;
double dis(Point a, Point b) {
return sqrt(pow(a.x-b.x, 2) + pow(a.y-b.y, 2)); // 距离公式
}
double js() {
double sum=0, circle=2*pi*r;
sum += dis(point[1], point[n]); // 第1条边到第n条边的距离
for (int i = 1; i < n; i++)
sum += dis(point[i], point[i+1]);
return sum + circle;
}
int main() {
scanf("%d %lf", &n, &r);
for (int i = 1; i <= n; i++)
scanf("%lf %lf", &point[i].x, &point[i].y);
printf("%.2lf", js());
return 0;
}