VJ 1007 绕钉子的长绳子

背景

平面上有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;
}
时间: 2024-10-11 13:42:12

VJ 1007 绕钉子的长绳子的相关文章

vijos 1007 绕钉子的长绳子

https://vijos.org/p/1007 分析:刚开始没看到逆时针,后来发现是道sb题...长度=钉子周长+多边形周长 #include<iostream> #include<cmath> #include<iomanip> using namespace std; const int maxn=110; const double pi=3.14159; double x[maxn],y[maxn]; int main(){ int n; double ans=

回档|绕钉子的长绳子

背景 Background 平面上有N个圆柱形的大钉子,半径都为R,所有钉子组成一个凸多边形. 现在你要用一条绳子把这些钉子围起来,绳子直径忽略不计. 描述 Description 求出绳子的长度 输入格式 Input Format 第1行两个数:整数N(1<=N<=100)和实数R. 接下来N行按逆时针顺序给出N个钉子中心的坐标 坐标的绝对值不超过100. 输出格式 Output Format 一个数,绳子的长度,精确到小数点后2位. 输入样例: 4 1 0.0 0.0 2.0 0.0 2.

洛谷 绕钉子的长绳子

背景 平面上有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 提示 如果你

1.19测试题

1.19测试题 1.P1007绕钉子的长绳子(https://vijos.org/p/1007) 背景 平面上有N个圆柱形的大钉子,半径都为R,所有钉子组成一个凸多边形. 现在你要用一条绳子把这些钉子围起来,绳子直径忽略不计. 描述 求出绳子的长度 格式 输入格式 第1行两个数:整数N(1<=N<=100)和实数R. 接下来N行按逆时针顺序给出N个钉子中心的坐标 坐标的绝对值不超过100. 输出格式 一个数,绳子的长度,精确到小数点后2位. 样例1 样例输入1 4 1 0.0 0.0 2.0

1.19日模拟

1.19测试题 1.P1007绕钉子的长绳子(https://vijos.org/p/1007) 背景 平面上有N个圆柱形的大钉子,半径都为R,所有钉子组成一个凸多边形. 现在你要用一条绳子把这些钉子围起来,绳子直径忽略不计. 描述 求出绳子的长度 格式 输入格式 第1行两个数:整数N(1<=N<=100)和实数R. 接下来N行按逆时针顺序给出N个钉子中心的坐标 坐标的绝对值不超过100. 输出格式 一个数,绳子的长度,精确到小数点后2位. 样例1 样例输入1 4 1 0.0 0.0 2.0

大神刷题表

9月27日 后缀数组:[wikioi3160]最长公共子串 dp:NOIP2001统计单词个数 后缀自动机:[spoj1812]Longest Common Substring II [wikioi3160]最长公共子串 [spoj7258]Lexicographical Substring Search 扫描线+set:[poj2932]Coneology 扫描线+set+树上删边游戏:[FJOI2013]圆形游戏 结论:[bzoj3706][FJ2014集训]反色刷 最小环:[poj1734

POJ 2365 Rope(水题)

[题意简述]:给出我们钉子个数与半径,让我们求出缠绕在钉子上的绳子有多长. [分析]:从题目中我们可以看出,绳子长度的和等于每两个钉子的距离的和加上接触在钉子上的绳子的长度,不难发现这部分长度其实就等于钉子的周长. 见代码: #include<iostream> #include<cmath> using namespace std; #define Pi 3.1415//这个精度要尽量高! 也可以用4.0*atan(1.0) double s(double x1,double y

break与continue及例题

1.break:①仅使用在switch-case和循环中: ②若在循环中,表示:结束"当前"循环,如for的内循环. Continue:使用在循环中,表示:结束"当次"循环. 2.label标签的使用 3.break和continue不可加语句 题38.①写10以内的奇数:②写3行10以内的奇数:③用label写3行10以内的奇数: Class TestBreakContinue{ Public static void main(string[]args){ For

51nod 1243 二分+贪心

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1243 1243 排船的问题 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 一个码头中有N艘船和N个木桩,船的长度为2*X,码头的宽度为M,N个木桩的位置(相对码头左岸的位置)会在数据中给出.船和船之间不能重叠,即每艘船的船头不能超过上一艘船的船尾,当然也不能超出码头的两岸.船和木桩之间用绳子