每次都选最左边的点,然后以这个点为原点
统计和这个点构成的三角形面积和
不难想到极角排序然后由叉积很容易求出
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1 const oo=1 shl 30; 2 eps=1e-8; 3 var i,j,k,m,n:longint; 4 x,y:array[0..6010] of longint; 5 z:array[0..6010] of double; 6 ans,xx,yy:int64; 7 8 procedure swap(var a,b:longint); 9 var c:longint;10 begin11 c:=a;12 a:=b;13 b:=c;14 end;15 16 procedure sort(l,r:longint);17 var i,j:longint;18 p,q:double;19 begin20 i:=l; j:=r;21 p:=z[(l+r) shr 1];22 repeat23 while z[i]p+eps do dec(j);25 if i<=j then26 begin27 swap(x[i],x[j]);28 swap(y[i],y[j]);29 q:=z[i]; z[i]:=z[j]; z[j]:=q;30 inc(i); dec(j);31 end;32 until i>j;33 if l y[i] then z[j]:=oo51 else z[j]:=-oo52 else z[j]:=(y[j]-y[i])/(x[j]-x[i]);53 sort(i+1,n);54 xx:=0; yy:=0;55 for j:=i+1 to n do56 begin57 ans:=ans+(x[j]-x[i])*yy-(y[j]-y[i])*xx;58 xx:=xx+x[j]-x[i]; yy:=yy+y[j]-y[i];59 end;60 end;61 writeln(abs(ans)/2:0:1);62 end.