zoukankan      html  css  js  c++  java
  • hdu_1392

      1 #include<iostream>
      2 #include<stdlib.h>
      3 #include<cmath>
      4 #include<stdio.h>
      5 using namespace std;
      6 int n;
      7 typedef struct
      8 {
      9     double x;
     10     double y;
     11 }Point;
     12 
     13 Point p[110],s[110];
     14 
     15 int top;
     16 
     17 double Mul(Point a, Point b, Point c)
     18 {
     19     return (b.x - a.x)*(c.y - a.y) - (b.y - a.y)*(c.x - a.x);
     20 }
     21 
     22 double dis(Point a, Point b)
     23 {
     24     return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
     25 }
     26 
     27 
     28 int cmp(const void *a, const void *b)                
     29 {
     30     Point c = *(Point *)a;
     31     Point d = *(Point *)b;
     32     double k = Mul(p[0], c, d);
     33     if(k < 0 || (!k && dis(c, p[0]) > dis(d, p[0]))) 
     34         return 1;
     35     return -1;
     36 } 
     37 
     38 
     39 void Con()
     40 {
     41     int i;
     42     for(i = 1; i < n; i++)
     43     {
     44         Point temp;
     45         if(p[i].y < p[0].y || (p[i].y == p[0].y && p[i].x < p[0].x))
     46         {
     47             temp = p[i];
     48             p[i] = p[0];
     49             p[0] = temp;
     50         }
     51     }
     52     qsort(p+1, n - 1, sizeof(p[0]), cmp);
     53     s[0] = p[0];        
     54     s[1] = p[1];
     55     s[2] = p[2];
     56     top =2;
     57     
     58     for(i = 3; i < n; i++)//congsan
     59     {
     60         while(top >= 2 && Mul(s[top - 1], s[top], p[i]) <= 0) 
     61             top--;
     62         top++;
     63         s[top] = p[i];
     64     }
     65 }
     66 
     67 
     68 int main()
     69 {
     70     
     71     while(cin>>n,n)
     72     {
     73         int i;
     74         for(i = 0; i < n; i++)
     75         {
     76             cin>>p[i].x>>p[i].y;
     77         }
     78         if(n == 1)
     79         {
     80             cout<<"0.00"<<endl;
     81             continue;
     82         }
     83     
     84         else if(n == 2)
     85         {
     86             printf("%.2lf\n",dis(p[0],p[1]));
     87             continue;
     88         }
     89         Con();
     90         double count = 0;
     91         for(i = 0; i < top; i++)
     92         {
     93             count += dis(s[i],s[i+1]);
     94         }
     95         count += dis(s[top],s[0]);
     96         printf("%.2lf\n",count);
     97 
     98     }
     99     return 0;
    100 }
  • 相关阅读:
    Java 借助poi操作PDF工具类
    【ES】Java High Level REST Client 使用示例(增加修改)
    数据库表结构查询SQL
    MySQL windows中的存储备份
    jenkins + Ansible Plugin + ansi-color 让结果显示颜色
    jenkins 构建历史 显示版本号
    python 2.7.11 环境安装
    ansible 安装和使用
    豌豆夹Redis解决方案Codis安装使用
    Spark on Mesos部署
  • 原文地址:https://www.cnblogs.com/konkon/p/2461271.html
Copyright © 2011-2022 走看看