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 }