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 }

 

你可能感兴趣的:(poj)