• bzoj1132


    每次都选最左边的点,然后以这个点为原点

    统计和这个点构成的三角形面积和

    不难想到极角排序然后由叉积很容易求出

     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   begin
    11     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   begin
    20     i:=l; j:=r;
    21     p:=z[(l+r) shr 1];
    22     repeat
    23       while z[i]<p-eps do inc(i);
    24       while z[j]>p+eps do dec(j);
    25       if i<=j then
    26       begin
    27         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<j then sort(l,j);
    34     if i<r then sort(i,r);
    35   end;
    36 
    37 begin
    38   readln(n);
    39   for i:=1 to n do
    40     readln(x[i],y[i]);
    41   for i:=1 to n-2 do
    42   begin
    43     k:=i;
    44     for j:=i to n do
    45       if x[j]<x[k] then k:=j;
    46     swap(x[i],x[k]);
    47     swap(y[i],y[k]);
    48     for j:=i+1 to n do
    49       if x[j]=x[i] then
    50         if y[j]>y[i] then z[j]:=oo
    51         else z[j]:=-oo
    52       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 do
    56     begin
    57       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.
    View Code
  • 相关阅读:
    ssh整合
    自定义Java集合
    java图形界面写个小桌面,内置简单小软件
    java简单日历
    javaSwing
    javaScript封装
    java解析xml文件
    缺省适配器
    适配器模式
    自定义SWT控件一之自定义单选下拉框
  • 原文地址:https://www.cnblogs.com/phile/p/4533360.html
Copyright © 2020-2023  润新知