码迷,mamicode.com
首页 > 其他好文 > 详细

VJ 1007 绕钉子的长绳子

时间:2015-05-24 15:36:16      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:

背景

平面上有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

 

题解:本以为是道简单的数学水题,但是为此WA了N次,现在也不知道原来的代码哪里错了

CODE:

狂WA..

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#define REP(i, s, n) for(int i = s; i <= n; i ++)
#define REP_(i, s, n) for(int i = n; i >= s; i --)
#define MAX_N 100 + 10
#define pi 3.1415926

using namespace std;

int main(){
    int n, r;
    double x[MAX_N], y[MAX_N];
    scanf("%d%d", &n, &r);
    REP(i, 1, n) cin >> x[i] >> y[i];
    
    double ans = 0;
    REP(i, 2, n)
        ans += sqrt((x[i] - x[i - 1]) * (x[i] - x[i - 1]) + (y[i] - y[i - 1]) * (y[i] - y[i - 1]));
    
    ans += sqrt((x[1] - x[n]) * (x[1] - x[n]) + (y[1] - y[n]) * (y[1] - y[n]));
    ans += 2.0 * r * pi;
    cout << ans << endl;
    return 0;
}

后来重新写了一个。。A了

#include <iostream>
#include <cstdio>
#include <cmath>
#define REP(i, s, n) for(int i = s; i <= n; i ++)
#define REP_(i, s, n) for(int i = n; i >= s; i --)
#define MAX_N 100 + 10

using namespace std;

int n;
double r, c, l = 0;
double x[MAX_N], y[MAX_N];

int main(){
    cin >> n >> r;
    c = 3.1415926 * 2.0 * r; //cout << c << endl;
    REP(i, 1, n)
        scanf("%lf%lf", &x[i], &y[i]);
    
    int i = 1;
    while (i <= n){
        if (i == n) l += sqrt((x[n] - x[1]) * (x[n] - x[1]) + (y[n] - y[1]) * (y[n] - y[1])),
            i ++;
        else l += sqrt((x[i] - x[i + 1]) * (x[i] - x[i + 1]) + (y[i] - y[i + 1]) * (y[i] - y[i + 1])),
            i ++;
    }
    
    printf("%.2lf\n", l + c);
    return 0;
}

 

VJ 1007 绕钉子的长绳子

标签:

原文地址:http://www.cnblogs.com/ALXPCUN/p/4525869.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!