寒假打算搞搞計算幾何。爲來年的省賽做準備。就按timus上面的題目分類切了計算幾何這一塊吧。
題目地址:http://acm.timus.ru/problem.aspx?space=1&num=1020
這題是最簡單的。有一些釘子,釘子是圓形,有半徑,互不相交,
要我們求出這個多邊形的周長,就是兩兩圓心之間的距離加上一個半徑爲r的圓的周長。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <vector>
using namespace std;
const double pi = acos(-1.0);
struct node
{
double x;
double y;
}a[105];
double Dist(node p,node q)
{
return sqrt( (p.x-q.x)*(p.x-q.x)+(p.y-q.y)*(p.y-q.y) );
}
int main()
{
int N;
double R;
while(scanf("%d %lf",&N,&R)!=EOF)
{
for(int i=0;i<N;i++)
scanf("%lf %lf",&a[i].x,&a[i].y);
double sum=0;
a[N]=a[0];
for(int i=0;i<N;i++)
sum+=Dist(a[i],a[i+1]);
sum+=2*pi*R;
printf("%.2f\n",sum);
}
return 0;
}