寒假打算搞搞计算几何。为来年的省赛做准备。就按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;
}