绕钉子的长绳子

题目背景

平面上有N个圆柱形的大钉子,半径都为R,所有钉子组成一个凸多边形。

现在你要用一条绳子把这些钉子围起来,绳子直径忽略不计。

题目描述

求出绳子的长度

输入输出格式

输入格式:

第1行两个数:整数N(1<=N<=100)和实数R。

接下来N行按逆时针顺序给出N个钉子中心的坐标

坐标的绝对值不超过100。

输出格式:

一个数,绳子的长度,精确到小数点后2位。

输入输出样例

输入样例#1:
4 1
0.0 0.0
2.0 0.0
2.0 2.0
0.0 2.0
输出样例#1:
14.28

说明

如果你用比较复杂的方法AC了,请想一想有没有更加简便的方法。

本题来自URAL1020,翻译来自NOCOW。

所有的圆弧合起来一定是一个圆。

两点间距离公式:

代码实现:

 1 #include<cmath>
 2 #include<cstdio>
 3 using namespace std;
 4 int n;
 5 double r,l,x[110],y[110];
 6 const double pi=3.1415926;
 7 int main(){
 8     scanf("%d%lf",&n,&r);
 9     l+=2*pi*r;
10     for(int i=1;i<=n;i++) scanf("%lf%lf",&x[i],&y[i]);
11     x[n+1]=x[1],y[n+1]=y[1];
12     for(int i=1;i<=n;i++)
13     l+=sqrt((x[i]-x[i+1])*(x[i]-x[i+1])+(y[i]-y[i+1])*(y[i]-y[i+1]));
14     printf("%.2lf",l);
15     return 0;
16 }

我自己打的开方函数居然只过了一半的点。

题目来源:洛谷

posted @ 2017-01-19 11:19  J_william  阅读(602)  评论(0编辑  收藏  举报