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 }