201800628模拟赛T2——最大土地面积
题目描述
在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成的多边形面积最大。
输入输出格式
输入格式:
第1行一个正整数N,接下来N行,每行2个数x,y,表示该点的横坐标和纵坐标。
输出格式:
最大的多边形面积,答案精确到小数点后3位。
输入输出样例
输入样例#1:
5
0 0
1 0
1 1
0 1
0.5 0.5
输出样例#1:
1.000
说明
数据范围\(n\le 2000\),\(|x|,|y|\le 100000\)。
题解
首先想到的当然是\(n^4\)大力枚举所有点,20分。
考虑优化,发现我们可以枚举一条边,再以该边为对角线求出左右两边的三角形最大值(我的方法是用叉积求出有向面积,找出最大值与最小值,减一下即可)30分。
考虑继续优化,我们发现四边形的四个顶点一定在凸包上,所以求先求凸包再枚举,50分。
五十分核心代码大致如下:
tubao();
double ans = 0.;
for(int i = 1; i <= m; ++i)
{
for(int j = 1; j < i; ++j)
{
minn = inf;
maxx = -inf;
for(int k = 1; k <= m; ++k)
{
if(i == k || j == k)
continue;
double area = area2(P[sta[i]], P[sta[j]], P[sta[k]]);
minn = min(minn, area);
maxx = max(maxx, area);
}
if(minn < 0. && maxx > 0.)
ans = max(maxx - minn, ans);
}
}
printf("%.3f", ans / 2.);
我们又能发现对于一条边,如果它在凸包上且作为对角线,我们发现凸包上的一侧的点到该线段的距离是一个凸函数,所以我们考虑三分,复杂度\(O(n^2\log n)\),听说卡一下常能过。
综上,我们发现我们整理已经整理出了一些性质,虽然都非常显而易见,但我们还没有把它们结合起来。
首先,凸包是肯定要求的。
受到之前的启发,我们仍然考虑枚举一条对角线,设现在枚举到的顶点为\(i, j\)。
设另两个点为\(a, b\)。我们先来看\(b\)。
首先,我们不难得出如果确定\(i,j\),那\(b\)到\(ij\)的距离一定是单峰的。那如果\(j\)开始逆时针转动,峰显然也会逆时针转动(可以想象是整个凸包转过来了)。

于是我们让\(b\)逆时针跑就行了。
那\(a\)也同理。
我们发现\(b\)对每个点只扫了一遍,对于每个\(i\)复杂度\(O(n)\),同理\(j,b\)都是,所以总复杂度\(O(n^2)\)。
核心代码如下:
tubao();
double ans = 0.;
for(int i = 1; i <= m; ++i)
{
int a = i % m + 1;
int b = (i + 2) % m + 1;
for(int j = i % m + 2; j <= m; ++j)
{
while(a % m + 1 != j && area(P[sta[i]], P[sta[j]], P[sta[a%m+1]]) > area(P[sta[i]], P[sta[j]], P[sta[a]]))
a = a % m + 1;
while(b % m + 1 != i && area(P[sta[i]], P[sta[j]], P[sta[b%m+1]]) > area(P[sta[i]], P[sta[j]], P[sta[b]]))
b = b % m + 1;
ans = max(ans, area(P[sta[i]], P[sta[j]], P[sta[a]]) + area(P[sta[i]], P[sta[j]], P[sta[b]]));
}
}
printf("%.3f", ans / 2.);
201800628模拟赛T2——最大土地面积的更多相关文章
- 模拟赛T2 交换 解题报告
模拟赛T2 交换 解题报告 题目大意: 给定一个序列和若干个区间,每次从区间中选择两个数修改使字典序最小. \(n,m\) 同阶 \(10^6\) 2.1 算法 1 按照题意模拟,枚举交换位置并比较. ...
- 20161003 NOIP 模拟赛 T2 解题报告
Weed duyege的电脑上面已经长草了,经过辨认上面有金坷垃的痕迹. 为了查出真相,duyege 准备修好电脑之后再进行一次金坷垃的模拟实验. 电脑上面有若干层金坷垃,每次只能在上面撒上一层高度为 ...
- NOIP欢乐模拟赛 T2 解题报告
小澳的坐标系 (coordinate.cpp/c/pas) [题目描述] 小澳者表也,数学者景也,表动则景随矣. 小澳不喜欢数学,可数学却待小澳如初恋,小澳睡觉的时候也不放过. 小澳的梦境中出现了一个 ...
- 20180530模拟赛T2——绀碧之棺
题目背景 qiancl 得到了一张藏宝图,上面写了一道谜题. 题目描述 定义\(F(n)\)为 n 在十进制下各个数位的平方和,求区间\([a,b]\)中有多少\(n\)满足\(k\times F(n ...
- 20180519模拟赛T2——pretty
[问题描述] 小美今天对于数列很有兴趣.小美打算找出一些漂亮的序列.一个漂亮的序列的限制如下: 长度为 n ,而且数列里只包含 [1,n] 的整数. 要不是不降的序列就是不升的序列. 小美想知道有多少 ...
- 2019.11.11 模拟赛 T2 乘积求和
昨天 ych 的膜你赛,这道题我 O ( n4 ) 暴力拿了 60 pts. 这道题的做法还挺妙的,我搞了将近一天呢qwq 题解 60 pts 根据题目给出的式子,四层 for 循环暴力枚举统计答案即 ...
- 5.12 省选模拟赛 T2 贪心 dp 搜索 差分
LINK:T2 这题感觉很套路 但是不会写. 区间操作 显然直接使用dp不太行 直接爆搜也不太行复杂度太高. 容易想到差分 由于使得整个序列都为0 那么第一个数也要i差分前一个数 强行加一个0 然后 ...
- 20161023 NOIP 模拟赛 T2 解题报告
Task 2.回文串计数 (calc.pas/calc.c/calc.cpp) [题目描述] 虽然是一名理科生,Mcx常常声称自己是一名真正的文科生.不知为何,他对于背诵总有一种莫名的热爱,这也促使他 ...
- 20161005 NOIP 模拟赛 T2 解题报告
beautiful 2.1 题目描述 一个长度为 n 的序列,对于每个位置 i 的数 ai 都有一个优美值,其定义是:找到序列中最 长的一段 [l, r],满足 l ≤ i ≤ r,且 [l, r] ...
随机推荐
- Codeforces Round #606 (Div. 1) Solution
从这里开始 比赛目录 我菜爆了. Problem A As Simple as One and Two 我会 AC 自动机上 dp. one 和 two 删掉中间的字符,twone 删掉中间的 o. ...
- js 立即调用函数 IIFE(Immediately Invoked Function Expression) 【转】
原文链接:https://www.cnblogs.com/ming-os9/p/8891300.html JS中 (function(){...})()立即执行函数 1 (function(){. ...
- springcloud(五,多个服务注册中心eureka)
spring cloud (一.服务注册demo_eureka) spring cloud (二.服务注册安全demo_eureka) spring cloud (三.服务提供者demo_provid ...
- luogu P2495 [SDOI2011]消耗战 |虚树+LCA+dp
题目描述 在一场战争中,战场由n个岛屿和n-1个桥梁组成,保证每两个岛屿间有且仅有一条路径可达.现在,我军已经侦查到敌军的总部在编号为1的岛屿,而且他们已经没有足够多的能源维系战斗,我军胜利在望.已知 ...
- kafka压测
原文并未提及kafka的版本 并且测试的消息大小都偏小 测试数据供参考 原文还测试了broker等 原文请移步文章末尾 4.1 producer测试 4.1.1 batch-size 测试结果 ...
- css设置手型光标
因为现在主流浏览器是chrome,所以要尽量使用 cursor:pointer,不要使用 cursor:hand chrome下支持的鼠标样式 default 默认光标(通常是一个箭头) auto 默 ...
- Javascript Object常用方法总结
Object.keys方法 Object.keys方法是JavaScript中用于遍历对象属性的一个方法 .它传入的参数是一个对象,返回的是一个数组,数组中包含的是该对象所有的属性名. 如: var ...
- AtCoder Grand Contest 014
AtCoder Grand Contest 014 A - Cookie Exchanges 有三个人,分别有\(A,B,C\)块饼干,每次每个人都会把自己的饼干分成相等的两份然后给其他两个人.当其中 ...
- Redis(三)数据类型
之前的文章中说了Redis的常见应用场景和特性,在特性章节中也大致说了数据结构契合场景.因为我想在更深入.更全面的学习Redis之前,了解场景和特性,才能在学习时更加全面且理解更透彻: redis的什 ...
- sedlauncher.exe 磁盘爆满
打开应用和功能,搜KB4023057,然后卸载. 快捷键WIN+R打开运行,输入services.msc回车打开系统服务,找到Windows Remediation Service (sedsvc)和 ...