zoukankan      html  css  js  c++  java
  • poj 1408(计算几何)

    1,求线段交点。

    2,枚举各个面积

      1 #include <iostream>
      2 #include <cstdio>
      3 #include <cstring>
      4 #include <algorithm>
      5 #include <cmath>
      6 
      7 using namespace std;
      8 
      9 struct point
     10 {
     11     double x,y;
     12 };
     13 struct line
     14 {
     15     point a,b;
     16     line(){}
     17     line(point aa,point bb)
     18     {
     19         a=aa;
     20         b=bb;
     21     }
     22 };
     23 
     24 point intersection(line u,line v)
     25 {
     26     point ret=u.a;
     27     double t=((u.a.x-v.a.x) * (v.a.y-v.b.y) -(u.a.y-v.a.y)*(v.a.x-v.b.x))/((u.a.x-u.b.x)*(v.a.y-v.b.y)-(u.a.y-u.b.y)*(v.a.x-v.b.x));
     28     ret.x+=(u.b.x-u.a.x)*t;
     29     ret.y+=(u.b.y-u.a.y)*t;
     30     return ret;
     31 }
     32 
     33 double area_of_polygon(int n,point * p)
     34 {
     35     double s;
     36     if(n<3) return 0;
     37     s=p[0].y*(p[n-1].x-p[1].x);
     38     for(int i=1;i<n;i++)
     39         s+=p[i].y*(p[i-1].x-p[(i+1)%n].x);
     40     return fabs(s/2);
     41 }
     42 
     43 double a[35],b[35],c[35],d[35];
     44 int n;
     45 
     46 int main()
     47 {
     48     while(scanf("%d",&n))
     49     {
     50         if(n==0) break;
     51         a[0]=b[0]=c[0]=d[0]=0.0;
     52         a[n+1]=b[n+1]=c[n+1]=d[n+1]=1.0;
     53         for(int i=1;i<=n;i++)
     54             scanf("%lf",&a[i]);
     55         for(int i=1;i<=n;i++)
     56             scanf("%lf",&b[i]);
     57         for(int i=1;i<=n;i++)
     58             scanf("%lf",&c[i]);
     59         for(int i=1;i<=n;i++)
     60             scanf("%lf",&d[i]);
     61         sort(a,a+n+1);
     62         sort(b,b+n+1);
     63         sort(c,c+n+1);
     64         sort(d,d+n+1);
     65         double ans=0;
     66         point tmp[4];
     67         point intsec[35][35];
     68         for(int i=0;i<=n+1;i++)
     69         {
     70             point aa,bb;
     71             aa.x=a[i];
     72             aa.y=0;
     73             bb.x=b[i];
     74             bb.y=1;
     75             line u=line(aa,bb);
     76             //cout<<u.a.x<<" "<<u.a.y<<" "<<u.b.x<<" "<<u.b.y<<endl;
     77             for(int j=0;j<=n+1;j++)
     78             {
     79                 point cc,dd;
     80                 cc.x=0;
     81                 cc.y=c[j];
     82                 dd.x=1;
     83                 dd.y=d[j];
     84                 line v=line(cc,dd);
     85                 intsec[i][j]=intersection(u,v);
     86                 //cout<<intsec[i][j].x<<" "<<intsec[i][j].y<<endl;
     87             }
     88         }
     89         for(int i=1;i<=n+1;i++)
     90         {
     91             for(int j=1;j<=n+1;j++)
     92             {
     93                 tmp[0]=intsec[i-1][j];
     94                 tmp[1]=intsec[i-1][j-1];
     95                 tmp[2]=intsec[i][j-1];
     96                 tmp[3]=intsec[i][j];
     97                 double t=area_of_polygon(4,tmp);
     98                 if(t>ans)
     99                     ans=t;
    100             }
    101         }
    102         printf("%.6f\n",ans);
    103     }
    104     return 0;
    105 }
  • 相关阅读:
    LeetCode 842. Split Array into Fibonacci Sequence
    LeetCode 1087. Brace Expansion
    LeetCode 1219. Path with Maximum Gold
    LeetCode 1079. Letter Tile Possibilities
    LeetCode 1049. Last Stone Weight II
    LeetCode 1046. Last Stone Weight
    LeetCode 1139. Largest 1-Bordered Square
    LeetCode 764. Largest Plus Sign
    LeetCode 1105. Filling Bookcase Shelves
    LeetCode 1027. Longest Arithmetic Sequence
  • 原文地址:https://www.cnblogs.com/Missa/p/2800047.html
Copyright © 2011-2022 走看看