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 }