背景
平面上有N个圆柱形的大钉子,半径都为R,所有钉子组成一个凸多边形。
现在你要用一条绳子把这些钉子围起来,绳子直径忽略不计。
描述
求出绳子的长度
格式
输入格式
第1行两个数:整数N(1<=N<=100)和实数R。
接下来N行按逆时针顺序给出N个钉子中心的坐标
坐标的绝对值不超过100。
输出格式
一个数,绳子的长度,精确到小数点后2位。
样例1
样例输入1
4 1
0.0 0.0
2.0 0.0
2.0 2.0
0.0 2.0
样例输出1
14.28
限制
各个测试点1s
提示
如果你用比较复杂的方法AC了,请想一想有没有更加简便的方法。
找规律 无论N是多少都是他两点间的距离加上一个圆 可以自己画画 。
#include <iostream> #include <cstring> #include <cstdio> #include <cmath> using namespace std; const double Pi=acos(-1.0); int i,j,N; double R,x[101],y[101],ans; int main() { scanf("%d%lf",&N,&R); for(i=0;i<N;++i) { scanf("%lf%lf",&x[i],&y[i]); if(i>=1) ans+=sqrt((x[i]-x[i-1])*(x[i]-x[i-1])+(y[i]-y[i-1])*(y[i]-y[i-1])); if(i==N-1) ans+=sqrt((x[i]-x[0])*(x[i]-x[0])+(y[i]-y[0])*(y[i]-y[0])); } ans+=R*2*Pi; printf("%.2lf",ans); }