POJ-1408 Fishnet 枚举+叉积

  题目链接:http://poj.org/problem?id=1408

  比较简单的题目,只是处理上麻烦了一点。

 1 //STATUS:C++_AC_32MS_208KB
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 #include<string.h>
 5 #include<math.h>
 6 #include<iostream>
 7 #include<string>
 8 #include<algorithm>
 9 #include<vector>
10 #include<queue>
11 #include<stack>
12 using namespace std;
13 #define LL __int64
14 #define pii pair<int,int>
15 #define Max(a,b) ((a)>(b)?(a):(b))
16 #define Min(a,b) ((a)<(b)?(a):(b))
17 #define mem(a,b) memset(a,b,sizeof(a))
18 #define lson l,mid,rt<<1
19 #define rson mid+1,r,rt<<1|1
20 const int N=40,M=1000000,INF=0x3f3f3f3f,MOD=1999997;
21 const LL LLNF=0x3f3f3f3f3f3f3f3fLL;
22 const double DNF=100000000;
23 
24 struct Node{
25     double x,y;
26 }nod[N][N];
27 int n;
28 
29 void linef(Node &l1,Node &l2,double &A,double &B,double &C){
30     A=-(l1.y-l2.y);
31     B=l1.x-l2.x;
32     C=-A*l1.x-B*l1.y;
33 }
34 
35 double getsum(Node &a,Node &b,Node &c, Node &d)
36 {
37     double s;
38     s=a.x*b.y-a.y*b.x;
39     s+=b.x*c.y-b.y*c.x;
40     s+=c.x*d.y-c.y*d.x;
41     s+=d.x*a.y-d.y*a.x;
42     return fabs(s*0.5);
43 }
44 
45 int main()
46 {
47  //   freopen("in.txt","r",stdin);
48     int i,j;
49     double a1,b1,c1,a2,b2,c2,ans;
50     while(~scanf("%d",&n) && n)
51     {
52         ans=-DNF;
53         nod[n+1][0].x=nod[n+1][0].y=0;
54         nod[n+1][n+1].x=1,nod[n+1][n+1].y=0;
55         for(i=1;i<=n;i++){
56             scanf("%lf",&nod[n+1][i].x);
57             nod[n+1][i].y=0;
58         }
59         nod[0][0].x=0,nod[0][0].y=1;
60         nod[0][n+1].x=nod[0][n+1].y=1;
61         for(i=1;i<=n;i++){
62             scanf("%lf",&nod[0][i].x);
63             nod[0][i].y=1;
64         }
65         for(i=n;i>=1;i--){
66             scanf("%lf",&nod[i][0].y);
67             nod[i][0].x=0;
68         }
69         for(i=n;i>=1;i--){
70             scanf("%lf",&nod[i][n+1].y);
71             nod[i][n+1].x=1;
72         }
73 
74         for(i=1;i<=n;i++){
75             linef(nod[i][0],nod[i][n+1],a1,b1,c1);
76             for(j=1;j<=n;j++){
77                 linef(nod[0][j],nod[n+1][j],a2,b2,c2);
78                 nod[i][j].x=(c2*b1-c1*b2)/(a1*b2-a2*b1);
79                 nod[i][j].y=(a1*c2-a2*c1)/(a2*b1-a1*b2);
80             }
81         }
82         for(i=0;i<=n;i++)
83             for(j=0;j<=n;j++)
84                 ans=Max(ans,getsum(nod[i][j],nod[i][j+1],nod[i+1][j+1],nod[i+1][j]));
85         printf("%.6lf\n",ans);
86     }
87     return 0;
88 }

 

posted @ 2013-01-20 02:15  zhsl  阅读(250)  评论(0编辑  收藏  举报