</pre><h1><strong>背景</strong></h1>平面上有N个圆柱形的大钉子,半径都为R,所有钉子组成一个凸多边形。<p>现在你要用一条绳子把这些钉子围起来,绳子直径忽略不计。</p><p></p><h1>描述</h1><p>求出绳子的长度</p><p></p><h1>格式</h1><p></p><p>输入格式</p><p></p>第1行两个数:整数N(1<=N<=100)和实数R。接下来N行按逆时针顺序给出N个钉子中心的坐标<p>坐标的绝对值不超过100。</p><p></p>输出格式<p>一个数,绳子的长度,精确到小数点后2位。</p><p></p><p></p><p>以逆时针顺序将N个钉子编号为1~N</p><p>dist(i,j)=i号钉子和j号钉子的直线距离</p><p>则Ans=dist(1,2)+dist(2,3)+........+dist(n,1)+2*π*R</p><p></p><p><pre name="code" class="cpp">#include <math.h> #include <iostream> #include <iomanip> #define MaxN 101 #define Pi 3.1415 using namespace std; class nail{ public: double x,y; }; int N; double R,Ans=0.000000; nail P[MaxN]; void init(){ cin>>N>>R; for (int i=0;i<N;i++) cin>>P[i].x>>P[i].y; } void work(){ int next; double a,b; Ans+=2.000*Pi*R; if (N==1) { cout<<fixed<<setprecision(2)<<Ans<<endl; return ; } for (int i=0;i<N;i++){ next=(i+1)%N; a=P[i].x-P[next].x; b=P[i].y-P[next].y; Ans+=sqrt(a*a+b*b); } cout<<fixed<<setprecision(2)<<Ans<<endl; } int main(){ init(); work(); return 0; }