可以看出,结果由一个个线段与圆弧组成,线段的长度好算,本题的主要关键是圆弧的长度。
将直线去掉,把所有的圆弧沿着直线的轨迹平移,可以刚好拼成一个整圆(具体的证法大家去翻各大数学书吧。。我只能大概的明白)。那么最后的答案就是所有线段的长度加上一个圆的周长了。
#include<stdio.h>
#include<math.h>
long n,i;
double r,sum,pi;
double v[102][3];
int main()
{
scanf("%ld %lf",&n,&r);
pi=3.141592653;
for (i=1;i<=n;i++)
{
scanf("%lf %lf",&v[i][1],&v[i][2]);
}
n++;
v[n][1]=v[1][1];v[n][2]=v[1][2];
sum=2*pi*r;
for (i=2;i<=n;i++)
sum+=sqrt(pow(v[i][1]-v[i-1][1],2)+pow(v[i][2]-v[i-1][2],2));
printf("%0.2lf",sum);
}
posted on 2011-07-05 22:10
梦转千寻 阅读(39)
评论(0) 编辑 收藏 引用