【dog与lxy】8.25题解-land
land
题目描述
dog终于有了一块领地,但是现在可怜的dog面临着lxy的入侵,于是他决定在自己的领地设置炮楼来保卫自己免受QJ。现在dog找到它可以在领地上设置炮楼的N个地点。但是留给dog的时间不多了,dog决定赶快建4个炮楼。而现在的问题是dog希望这4个炮楼的防守区域最大。而4个炮楼的防守区域就是这4个炮楼的多边形的面积。Dog马上找到了你,请你帮助他,而你不忍心让dog惨遭蹂躏,那么请告诉dog他的防守区域最大为多少。(保证最终得到的防守区域是凸四边形)
输出输出
输入文件:
第1行1个数n,表示可能修建炮楼的位置。接下来n行,每行2个数x,y,表示可能的炮楼的位置。(不考虑地球曲面的影响,默认为dog的领地是块平面,然后建立直角坐标系,给出的就是直角坐标系上的位置)。
输出文件:
dog他的防守区域最大为多少。精确到小数点后3位。
样例
输入
5
0 0
1 0
1 1
0 1
0.5 0.5
输出
1
说明
数据范围
100%的数据中,n<=2000,|x|,|y|<=100000.
50%的数据中,n<=1000, |x|,|y|<=10000.
30%的数据中,n<=50, |x|,|y|<=100.
思路
给出点集S,要求从S中选出4个点,使得这四个点组成的四边形面积最大(S<=2000)
如果最终得到的是凸四边形,题目就好做得多了。
对于这一题数据较小,O(n^2)的复杂度是能够AC的。
优美的暴力
- 对于第一个点,找出离它最远的点,连接这两个点成一个线段
- 枚举每一个点,分别找出线段两边距离线段最远的点
- 用叉乘或者分割成两个三角形计算四边形的面积
- 与最大值比较,更新最大值
- 对于第二个点,第三个······重复操作
代码
#include<iostream>
#include<cstdio>
#include<cmath>
#define MAXX 2000+5
using namespace std;
int n,maxnum,maxup,maxunder;
double x[MAXX],y[MAXX],k,b;
inline void search(int p){
double maxn=-1000;
for(int i=1;i<=n;i++){
if(i==p) continue;
if(maxn<sqrt((x[i]-x[p])*(x[i]-x[p])+(y[i]-y[p])*(y[i]-y[p]))){
maxn=sqrt((x[i]-x[p])*(x[i]-x[p])+(y[i]-y[p])*(y[i]-y[p]));
maxnum=i;
}
}
}
inline void fangcheng(int i){
k=(y[i]-y[maxnum])/(x[i]-x[maxnum]);
b=y[i]-k*x[i];
}
inline void runup(int p){
double maxn=-1000;
for(int i=1;i<=n;i++){
if(i==p) continue;
if(x[i]*k+b>=y[i]) continue;
if(maxn<(abs(k*x[i]-y[i]+b)/sqrt(k*k+1))){
maxn=(abs(k*x[i]-y[i]+b)/sqrt(k*k+1));
maxup=i;
}
}
}
inline void rununder(int p){
double maxn=-1000;
for(int i=1;i<=n;i++){
if(i==p) continue;
if(x[i]*k+b<=y[i]) continue;
if(maxn<(abs(k*x[i]-y[i]+b)/sqrt(k*k+1))){
maxn=(abs(k*x[i]-y[i]+b)/sqrt(k*k+1));
maxunder=i;
}
}
}
inline double get_s(int i){
double s=0;
s+=x[i]*y[maxup]-x[maxup]*y[i];
s+=x[maxup]*y[maxnum]-x[maxnum]*y[maxup];
s+=x[maxnum]*y[maxunder]-x[maxunder]*y[maxnum];
s+=x[maxunder]*y[i]-x[i]*y[maxunder];
s*=0.5;
s=abs(s);
return s;
}
int main(){
freopen("Land.in","r",stdin);
freopen("Land.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%lf%lf",&x[i],&y[i]);
double ans=-1;
for(int i=1;i<=n;i++){
search(i);
fangcheng(i);
runup(i);
rununder(i);
ans=max(get_s(i),ans);
}
printf("%.3lf",ans);
return 0;
}
【dog与lxy】8.25题解-land的更多相关文章
- 【dog与lxy】8.25题解-necklace
necklace 题目描述 可怜的dog最终还是难逃厄运,被迫于lxy签下城下之约.这时候lxy开始刁难dog. Lxy首先向dog炫耀起了自己的财富,他拿出了一段很长的项链.这个项链由n个珠子按顺序 ...
- [NOIP模拟25]题解
A.字符串 Catalan数不能再裸了 #include<cstdio> #include<iostream> #include<cstring> using na ...
- HZOI20190818模拟25题解
题面:https://www.cnblogs.com/Juve/articles/11372379.html A:字符串 其实是CATALAN数水题... 和网格一毛一样:https://www.cn ...
- 【题解】滑雪 luogu1434 记忆化搜索
记忆化搜索入门题 题目 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道在 ...
- 【bzoj1426】收集邮票
题目描述 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由于凡凡也很喜欢邮票,所 ...
- 【BZOJ1426】收集邮票 期望
[BZOJ1426]收集邮票 Description 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的, ...
- LeetCode Word Break II
原题链接在这里:https://leetcode.com/problems/word-break-ii/ 题目: Given a string s and a dictionary of words ...
- Jpeg(模拟)
Jpeg Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status ...
- [TYVJ] P1004 滑雪
滑雪 背景 Background 成成第一次模拟赛 第三道 描述 Description trs喜欢滑雪.他来到了一个滑雪场,这个滑雪场是一个矩形,为了简便,我们用r行c列的矩阵来表示 ...
随机推荐
- Ping命令浅析
Ping Ping基于ICMP协议. Ping可以分为 内网Ping 和 外网Ping 下面以内网Ping为例,使用的软件是eNSP和WireShark Step1.创建拓扑,PC ...
- NumPy之:ndarray多维数组操作
NumPy之:ndarray多维数组操作 目录 简介 创建ndarray ndarray的属性 ndarray中元素的类型转换 ndarray的数学运算 index和切片 基本使用 index wit ...
- 按照自己的思路研究Spring AOP源码【2】
目录 问题的提出 哪一步导致了顺序的改变 AbstractAdvisorAutoProxyCreator.sortAdvisors()方法 总结 问题的提出 上面这篇文章介绍了Spring AOP源码 ...
- JWT 基本使用
JWT 基本使用 在上一节中 session 共享功能使用 redis 进行存储,用户量激增时会导致 redis 崩溃,而 JWT 不依赖服务器,能够避免这个问题. 1.传统 session 1.1. ...
- TypeScript 中 Optional Chaining 和 Nullish Coalescing
Optional Chaining 解决的问题是重复且无意义的判空,之所以说无意义,是对业务来说它不是必需的,但不判空,程序直接就挂了,比如: let x = foo.bar.baz(); 这里的 ...
- Objective-C 中不带加减号的方法
显而易见的事实是,Objective-C 中,+ 表示类方法,- 表示实例方法. 但看别人代码过程中,还会发现一种,不带加减号的方法. @implementation MyViewController ...
- linux基础之基础命令一
本节内容: 1. ls:列出当前目录下的文件和目录 -l: 长输出,显示文件的详细信息(-普通文本,d目录) -a: 显示所有文件,包括隐藏文件 -h: 人类易读(-lh) -d: 显示目录信息(-l ...
- Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]] 错误(Day_25)
错误: 在maven项目,web启动的时候报这个错误 Failed to start component [StandardEngine[Tomcat].StandardHost[localho ...
- CSS(2)盒子模型、定位浮动
盒子模型 盒子模型:一个盒子中主要的属性就5个.width与height.padding.border.margin.盒子模型标准有两种为标准盒模型和IE盒模型.学习上以标准盒子模型为主 width和 ...
- docker-ce 安装
配置源 确认版本 添加镜像加速器 https://docs.docker.com/engine/release-notes/19.03/ for centos wget -O /etc/yum.rep ...