【Vijos P1007】绕钉子的长绳子 c++题解

来源:互联网 发布:智能医学软件 编辑:程序博客网 时间:2024/05/01 04:27
</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.1415using 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;}


0 0
原创粉丝点击