[SCOI2007]最大土地面积(旋转卡壳)
首先,最大四边形的四个点一定在凸包上
所以先求凸包
有个结论,若是随机数据,凸包包括的点大约是\(\log_2n\)个
然鹅,此题绝对不会这么轻松,若\(O(n^4)\)枚举,只有50分
所以还是要想正解
旋转卡壳是继承上一个点枚举,所以枚举对角线上的两点,通过旋转卡壳找剩余两点
复杂度\(O(n^2)\)
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<stack>
#include<set>
#include<bitset>
#include<sstream>
#include<cstdlib>
#define QAQ int
#define TAT long long
#define OwO bool
#define ORZ double
#define F(i,j,n) for(QAQ i=j;i<=n;++i)
#define E(i,j,n) for(QAQ i=j;i>=n;--i)
#define MES(i,j) memset(i,j,sizeof(i))
#define MEC(i,j) memcpy(i,j,sizeof(j))
using namespace std;
const QAQ N=200005;
const ORZ eps=1e-8;
QAQ n;
struct Point{
ORZ x,y;
friend Point operator + (Point a,Point b){
Point t;
t.x=a.x+b.x;t.y=a.y+b.y;
return t;
}
friend Point operator - (Point a,Point b){
Point t;
t.x=a.x-b.x;t.y=a.y-b.y;
return t;
}
friend ORZ operator ^ (Point a,Point b){
return a.x*b.y-a.y*b.x;
}
friend ORZ operator * (Point a,Point b){
return a.x*b.x+a.y*b.y;
}
}a[N],s[N];
QAQ top;
ORZ ans;
QAQ sign(ORZ x){
return fabs(x)<=eps ? 0 : (x>0 ? 1 : -1);
}
ORZ dis(Point i,Point j){
return (i.x-j.x)*(i.x-j.x)+(i.y-j.y)*(i.y-j.y);
}
OwO comp(Point i,Point j){
ORZ x=(i-a[1])^(j-a[1]);
return x>0||x==0&&dis(a[1],i)<dis(a[1],j);
}
void Graham(){
QAQ k=1;
F(i,2,n) if(a[i].y<a[k].y||(a[i].y==a[k].y&&a[i].x<a[k].x)) k=i;
swap(a[k],a[1]);
sort(a+2,a+n+1,comp);
s[++top]=a[1];s[++top]=a[2];
F(i,3,n){
while(top>=2&&sign((s[top]-s[top-1]) ^ (a[i]-s[top-1]))<=0) top--; //"<=0" 别忘"="
s[++top]=a[i];
}
}
ORZ cal(Point i,Point j,Point k,Point l){
return (((k-i)^(j-i))+((l-i)^(k-i)))/2.0;
}
ORZ work(){
ORZ ans=0;
s[top+1]=a[1];
F(i,1,top){
QAQ a=i%top+1,b=(i+2)%top+1;
F(j,i+2,top){
while(a%top+1!=j&&(((s[a]-s[i])^(s[j]-s[i])))<(((s[a+1]-s[i])^(s[j]-s[i])))) (a%=top)+=1;
while(b%top+1!=j&&(((s[j]-s[i])^(s[b]-s[i])))<(((s[j]-s[i])^(s[b+1]-s[i])))) (b%=top)+=1;
//注意叉积的前后向量顺序
ans=max(ans,fabs(((s[a]-s[i])^(s[j]-s[i]))+((s[j]-s[i])^(s[b]-s[i]))));
}
}
return ans;
}
QAQ main(){
scanf("%d",&n);
F(i,1,n) scanf("%lf%lf",&a[i].x,&a[i].y);
Graham();
printf("%.3lf\n",work());
return 0;
}
[SCOI2007]最大土地面积(旋转卡壳)的更多相关文章
- bzoj1069 [SCOI2007]最大土地面积 旋转卡壳
1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 3767 Solved: 1501[Submit][Sta ...
- BZOJ 1069: [SCOI2007]最大土地面积(旋转卡壳)
题目链接~ 1069: [SCOI2007]最大土地面积 思路很简单,极角排序求完凸包后,在凸包上枚举对角线,然后两边分别来两个点旋转卡壳一下,搞定! 不过计算几何的题目就是这样,程序中间的处理还是比 ...
- BZOJ 1069: [SCOI2007]最大土地面积 [旋转卡壳]
1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 2978 Solved: 1173[Submit][Sta ...
- bzoj 1069 [SCOI2007]最大土地面积——旋转卡壳
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1069 发现 n 可以 n^2 .所以枚举对角线,分开的两部分三角形就可以旋转卡壳了. 注意坐 ...
- 1069: [SCOI2007]最大土地面积|旋转卡壳
旋转卡壳就是先求出凸包.然后在凸包上枚举四边形的对角线两側分别找面积最大的三角形 因为在两側找面积最大的三角形的顶点是单调的所以复杂度就是n2 单调的这个性质能够自行绘图感受一下,似乎比較显然 #in ...
- luogu4166 最大土地面积 (旋转卡壳)
首先这样的点一定在凸包上 然后旋转卡壳就可以 具体来说,枚举对角线的一个端点,另一个端点在凸包上转,剩下两个点就是一个叉积最大一个最小,而这两个点也是跟着转的 所以是$O(N^2)$ #include ...
- bzoj 1069 [SCOI2007]最大土地面积(旋转卡壳)
1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2277 Solved: 853[Submit][Stat ...
- [Bzoj1069][Scoi2007]最大土地面积(凸包)(旋转卡壳)
1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 3629 Solved: 1432[Submit][Sta ...
- luogu P4166 [SCOI2007]最大土地面积 凸包 旋转卡壳
LINK:最大土地面积 容易想到四边形的边在凸包上面 考虑暴力枚举凸包上的四个点计算面积. 不过可以想到可以直接枚举对角线的两个点找到再在两边各找一个点 这样复杂度为\(n^3\) 可以得到50分. ...
- 【BZOJ】1069: [SCOI2007]最大土地面积(凸包+旋转卡壳)
http://www.lydsy.com/JudgeOnline/problem.php?id=1069 显然这四个点在凸包上,然后枚举两个点找上下最大的三角形即可. 找三角形表示只想到三分QAQ.. ...
随机推荐
- VxWorks多任务功能
http://blog.chinaunix.net/uid-23741326-id-84935.html VxWorks的任务有优先级的概念,其任务调度也是基于优先级考虑的,是抢占式的,VxWorks ...
- LINUX的SSH下FTP到远程服务器Entering Passive Mode失败解决
LINUX 系统FTP连接远程服务器经常出现在传输文件或者发出 ls命令时候出现 "Entering Passive Mode "然后就再也无法运作了.该工作主要是因为LINUX的 ...
- Sequence(尺取)
A sequence of N positive integers (10 < N < 100 000), each of them less than or equal 10000, a ...
- 16-EasyNetQ之自动订阅者
EasyNetQ v0.7.1.30版本有了一个简单AutoSubscriber.你能够使用它很容易的去扫描指定程序集中实现了IConsume 或 IConsumeAsync接口的类,然后这个自动订阅 ...
- 【问题】/usr/bin/env: php: 没有那个文件或目录
php不是默认安装的,在使用symfony创建新项目时,出现这个提示. [root@localhost html]# symfony demo /usr/bin/env: php: 没有那个文件或目录 ...
- 201671010127 2016—2017-2 java编程中遇到的问题
学习了Java的一些基本语法后,心里的激动无法按捺,总是比较Java与C语言语法的区别,一有闲时间就会用刚学的Java基本语法写一些简单的程序.这不,一不小心又陷入了困难,本人在此诚挚的请教各位园友, ...
- 配置环境是程序员的第一步 -- Windows 10 下 MySQL 安装
MySQL 作为最典型的关系型数据库管理系统,由于其体积小.速度快.总体拥有成本低,尤其是其开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库.MySQL 社区版的功能也足够我们 ...
- 关于windows的锁定状态
本来以为要在项目里用上的,现在看来不需要了,把相关的函数列一下吧,以后如果用到了,再写详细点 锁定计算机 : LockWorkStation 注册Windows状态变化的监听函数: BOOL WTSR ...
- vim 的小幅移动
1.操作符命令和位移 x --->删除一个字符,4x ---->删除4个字符. dw --->可以删除一个单词,d4w ---->删除4个单词. d$ ----> 删除 ...
- DBMS ODBC JDBC是什么?
昨天躺在被窝里面看了几页电子书,今天写下来. 数据库就是存放数据的仓库. DBMS的意思是数据库管理系统,作用就是“管理”数据库的.“管理”这两个字简单说来就是“增删改查”.所以DBMS就是能够对数据 ...