Codeforces Round #198 (Div. 2) —— B

B题是一个计算几何的题,虽然以前看过计算几何的ppt,但一直都没有写过;

昨晚比赛的时候本来想写的,但是怕不熟练浪费时间,太可惜了!

其实没必要选出一个最大的矩形;

以矩形的一条对角线为轴,向上或者向下找到最大的三角形的面积就行了,

可以看看官方的题解,讲的挺不错的!

代码:

 1 #include<cstdio>
 2 #define eps 0.00000001
 3 using namespace std;
 4 int a[305][2];
 5 double ccw(int x,int y,int z)
 6 {
 7     return ((double)(a[y][0]-a[x][0])*(a[z][1]-a[x][1])-(a[y][1]-a[x][1])*(a[z][0]-a[x][0]))*0.5;
 8 }
 9 double check(double x,double y)
10 {
11     if(y-x>=eps)
12         return y;
13     else return x;
14 }
15 int main()
16 {
17     int n;
18     double ans=0;
19     scanf("%d",&n);
20     for(int i=0;i<n;i++)
21         scanf("%d%d",&a[i][0],&a[i][1]);
22     for(int i=0;i<n;i++)
23         for(int j=i+1;j<n;j++)
24         {
25             double min=-1,max=-1;
26             for(int k=0;k<n;k++)
27                 if(k!=i&&k!=j)
28                 {
29                     if(ccw(i,j,k)<0)
30                         min=check(min,-ccw(i,j,k));
31                     else
32                         max=check(max,ccw(i,j,k));
33                 }
34             if(max>=0&&min>=0)
35             ans=check(ans,max+min);
36         }
37     printf("%lf
",ans);
38     return 0;
39 }
View Code
原文地址:https://www.cnblogs.com/yours1103/p/3293170.html