Vijos P1007绕钉子的绳子
2015-07-04 09:50
357 查看
[align=center]P1007绕钉子的长绳子[/align]
标签:模拟
现在你要用一条绳子把这些钉子围起来,绳子直径忽略不计。
接下来N行按逆时针顺序给出N个钉子中心的坐标
坐标的绝对值不超过100。
分析:纯数学问题,结论是:绳子的长度=圆柱中心围成的多边形周长+一个圆柱的周长。
LANGUAGE:c++
CODE:
标签:模拟
背景
平面上有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了,请想一想有没有更加简便的方法。来源
Ural分析:纯数学问题,结论是:绳子的长度=圆柱中心围成的多边形周长+一个圆柱的周长。
LANGUAGE:c++
CODE:
#include <iostream> #include <cmath> #include <iomanip> using namespace std; int main() { const double PI=3.14159265; int n; double r,x[1005],y[1005]; cin>>n>>r>>x[0]>>y[0]; double sum=PI*r*2; for(int i=1;i<n;i++){ cin>>x[i]>>y[i]; sum+=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) sum+=sqrt((x[i]-x[0])*(x[i]-x[0])+(y[i]-y[0])*(y[i]-y[0])); } cout<<setprecision(2)<<fixed<<sum; return 0; }
相关文章推荐
- PHP获取13位时间戳
- jquery unbind的使用
- C#实现的字符串相似度对比类
- php-根据用户IP获得用户地址-新浪
- Android SQLite
- TreeMap集合如何按照Value进行排序
- 真正成熟的男人不做的12件事
- 使用 iOS6 自带的 social.framework 实现分享文字图片等到新浪微博,twitter,
- Swift 函数的定义与调用(Defining and Calling Functions)
- 疯狂ios讲义之自定义UI控件
- 3D数学基础--3D中的方位与角位移(3)
- 3D数学基础--3D中的方位与角位移(3)
- iOS开发小记:带输入框(TextField)的UIAlertView
- cocos2d-x图片异步加载
- ecshop网站搬家
- PHP QR库生成二维码完整源码包分享
- js控制div不随滚动条移动
- 排序算法之(6)——基数排序
- Objective-C精确的货币计算
- JSON结构描述