URAL1020 ROPE



这题题意不难,就是有n个半径一样的圆,,,,一根绳子把它们围起来问最短的绳长,,,,,,,,,,多画画图就能发现的所有外围的圆圈的圆心距离加上2πR,,,


这题数据给的!!!!!必然是凸多边形而且还是按顺序给!!!!!!!!本来我都要怕的不行了看凸包了 !!!!!!!(还有一个坑π要当3.1416算(或者更精确 ),,用DOUBLE)

后面还是附上凸包的东西吧~


#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include<bits/stdc++.h>
#include <string.h>

using namespace std;


int main()
{
    int geshu;
    double r;
    scanf("%d%lf",&geshu,&r);
    double w1=2*3.1416*r;
    double a[101][2];
    double w2=0;
    for(int i=0;i<geshu;i++)
    {
        scanf("%lf%lf",&a[i][0],&a[i][1]);
        if(i>0)
        {
            w2+=sqrt((a[i][0]-a[i-1][0])*(a[i][0]-a[i-1][0])+(a[i][1]-a[i-1][1])*(a[i][1]-a[i-1][1]));
        }
    }
    w2+=sqrt((a[0][0]-a[geshu-1][0])*(a[0][0]-a[geshu-1][0])+(a[0][1]-a[geshu-1][1])*(a[0][1]-a[geshu-1][1]));
    printf("%.2lf\n",w1+w2);
    return 0;
}


凸包(找角度。。。。。。。)

 Graham扫描法:
    找出点集p[]中最下面的点(有多个时取最左边的),以该点为极点,求出其他所有点的极角,
显然,极角范围为 [0, 180)度,(这里也可以用叉乘来看)对这些点按极角的升序排序, 先把极点和排序后的第一个点和第二个点入栈,再一次循环(i = 3 -> n-1),若栈顶的两个点和当前的点p[i]这三点连线的方向向顺时针方向偏转,则栈顶元素出栈,直到向逆时针方向偏转或者栈内只有2个元素了,就把当前点p[i]入栈。
最后栈中的元素就是所要求的凸包上的点,这里指的是凸包的极点(直线上的非端点不是凸包的极点)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值