博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 1069 [SCOI2007]最大土地面积
阅读量:4978 次
发布时间:2019-06-12

本文共 1244 字,大约阅读时间需要 4 分钟。

看了黄学长的博客才知道是旋转卡壳的裸题,我似乎是用暴力卡过的

首先这四个点一定在凸包上,要先把凸包搞出来(忘了判重点WA了一个小时QAQ),

因为n的范围很小,所以我们可以直接枚举这个四边形的对角线,分别找这条对角线两边的点与这条线组成的最大三角形

因为是一个凸包所以我们可以三分,但实际上这是有决策单调性的,所以直接上旋转卡壳就可以过了

1 #define MAXN 4010UL 2 #include 
3 #include
4 #include
5 6 using namespace std; 7 8 int n, hd, tl, T, num; 9 double ans;10 11 struct Point {12 double x, y;13 friend double operator * (Point a, Point b) {14 return a.x*b.y-a.y*b.x;15 }16 friend Point operator - (Point a, Point b) {17 return (Point){a.x-b.x, a.y-b.y};18 }19 friend bool operator < (Point a, Point b) {20 return a.x==b.x?a.y
=3) {++ T;38 int mid = (l+r)>>1, midd = (mid+r)>>1;39 if(F(a, b, pt[mid])>F(a, b, pt[midd])) r = midd-1;40 else l = mid+1;41 }42 for(int i = l ; i <= r ; ++ i) {43 double w = F(a, b, pt[i]);44 if(ret
= 2 ; -- i) {58 while(hd+1
=2&&i+ti-j>=2) {67 lt1 = Solve(pt[i], pt[j], i+1, j-1), lt2 = Solve(pt[i], pt[j], j+1, i+ti-1);68 double w = F(pt[i], pt[j], pt[lt1])+F(pt[i], pt[j], pt[lt2]);69 if(ans
View Code

 

转载于:https://www.cnblogs.com/assassain/p/5437671.html

你可能感兴趣的文章