zoukankan      html  css  js  c++  java
  • poj 3348 cows 凸包面积

     1 /**
     2 大意: 给定多个点求其确定的面积可以存放多少个面积为50的东西
     3 思路: 1、凸包确定多边形
     4           2、 多边形求面积
     5           3、 面积/50 取整
     6 **/
     7 #include <iostream>
     8 #include <algorithm>
     9 using namespace std;
    10 #define maxn 10010
    11 struct point {
    12     double x,y;
    13     point (double x=0,double y=0):x(x),y(y){}
    14 };
    15 
    16 point p[maxn],ch[maxn];
    17 typedef point Vector;
    18 
    19 Vector operator -(point a,point b){
    20     return Vector (a.x-b.x,a.y-b.y);
    21 }
    22 
    23 double cross(Vector a,Vector b){
    24     return a.x*b.y-a.y*b.x;
    25 }
    26 double polygonarea(point *p,int n){
    27     double area =0;
    28     for(int i=1;i<n-1;i++){
    29         area += cross(p[i]-p[0],p[i+1]-p[0]);
    30     }
    31     return area/2;
    32 }
    33 bool cmp(point a,point b){
    34     if(a.x==b.x)
    35         return a.y<b.y;
    36     return a.x<b.x;
    37 }
    38 
    39 int convexHull(point *p,int n,point *ch){
    40     sort(p,p+n,cmp);
    41     int m=0;
    42     for(int i=0;i<n;i++){
    43         while(m>1&&cross(ch[m-1]-ch[m-2],p[i]-ch[m-2])<=0)
    44             m--;
    45         ch[m++] = p[i];
    46     }
    47     int k = m;
    48     for(int i= n-2;i>=0;i--){
    49         while(m>k&&cross(ch[m-1]-ch[m-2],p[i]-ch[m-2])<=0)
    50             m--;
    51         ch[m++] = p[i];
    52     }
    53     if(n>1) m--;
    54     return m;
    55 }
    56 int main()
    57 {
    58     int n;
    59     cin>>n;
    60     for(int i=0;i<n;i++){
    61         cin>>p[i].x>>p[i].y;
    62     }
    63     int res = convexHull(p,n,ch);
    64     double resarea = polygonarea(ch,res);
    65     cout<<(int )resarea/50<<endl;
    66     return 0;
    67 }
  • 相关阅读:
    统计创建对象个数
    动手动脑
    开学第一周心得
    放假第五周总结
    放假第四周总结
    第一周总结
    04-异常处理-动手动脑
    03-继承与多态-动手动脑
    02-类和对象-跟踪类对象创建个数
    02-类和对象-动手动脑
  • 原文地址:https://www.cnblogs.com/Bang-cansee/p/3724191.html
Copyright © 2011-2022 走看看