本文主要是介绍P1513 绕钉子的长绳子,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 题目
- 思路
- 代码
题目
洛谷 P1513
思路
把绳子分为直线和曲线两部分
直线:将以钉子圆心构成的凸多边形边往外平移半径的距离,就是绳子的直线部分
曲线:将所有曲线拼接成一段圆弧,那么只要求出曲线圆心角的度数和即可,即上图蓝色的角的和
180n-内角和=180n-180(n-2)=360,恰好是一个圆
π建议用反三角函数得到,比如acos(-1),即arccos(-1)
题目说点按逆时针顺序给出的,所以直接相邻的两个、最后一个和第一个算距离即可。
代码
#include<math.h>
#include<stdio.h>double x[102],y[102];int main()
{int n;double r,len=0;scanf("%d%lf",&n,&r);for(int i=1;i<=n;++i) scanf("%lf%lf",&x[i],&y[i]);x[n+1]=x[1];y[n+1]=y[1];for(int i=1;i<=n;++i) len+=sqrt(pow(x[i]-x[i+1],2)+pow(y[i]-y[i+1],2));len+=2*acos(-1)*r;printf("%.2lf",len);return 0;
}
这篇关于P1513 绕钉子的长绳子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!