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的。

优美的暴力

  1. 对于第一个点,找出离它最远的点,连接这两个点成一个线段
  2. 枚举每一个点,分别找出线段两边距离线段最远的点
  3. 用叉乘或者分割成两个三角形计算四边形的面积
  4. 与最大值比较,更新最大值
  5. 对于第二个点,第三个······重复操作

代码

#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的更多相关文章

  1. 【dog与lxy】8.25题解-necklace

    necklace 题目描述 可怜的dog最终还是难逃厄运,被迫于lxy签下城下之约.这时候lxy开始刁难dog. Lxy首先向dog炫耀起了自己的财富,他拿出了一段很长的项链.这个项链由n个珠子按顺序 ...

  2. [NOIP模拟25]题解

    A.字符串 Catalan数不能再裸了 #include<cstdio> #include<iostream> #include<cstring> using na ...

  3. HZOI20190818模拟25题解

    题面:https://www.cnblogs.com/Juve/articles/11372379.html A:字符串 其实是CATALAN数水题... 和网格一毛一样:https://www.cn ...

  4. 【题解】滑雪 luogu1434 记忆化搜索

    记忆化搜索入门题 题目 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道在 ...

  5. 【bzoj1426】收集邮票

    题目描述 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由于凡凡也很喜欢邮票,所 ...

  6. 【BZOJ1426】收集邮票 期望

    [BZOJ1426]收集邮票 Description 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的, ...

  7. LeetCode Word Break II

    原题链接在这里:https://leetcode.com/problems/word-break-ii/ 题目: Given a string s and a dictionary of words  ...

  8. Jpeg(模拟)

    Jpeg Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status  ...

  9. [TYVJ] P1004 滑雪

    滑雪   背景 Background 成成第一次模拟赛 第三道   描述 Description     trs喜欢滑雪.他来到了一个滑雪场,这个滑雪场是一个矩形,为了简便,我们用r行c列的矩阵来表示 ...

随机推荐

  1. win10 下安卓源码同步小技巧

    win10下,通过 清华镜像源 AOSP 可以快速拿到 100G 的 .repo  备份 然后 用 repo sync 就可以得到 安卓源码,爽不爽! 下载到win10 e盘下,用powershell ...

  2. BUAA软件工程_软件案例分析

    写在前面 项目 内容 所属课程 2020春季计算机学院软件工程(罗杰 任健) (北航) 作业要求 软件案例分析 课程目标 培养软件开发能力 本作业对实现目标的具体作用 对案例进行分析以学习软件开发的经 ...

  3. OO_Unit4_UML模型化设计

    CSDN博客传送门 @ 目录 一.架构设计 (一)第一次作业 作业需求分析 建立类图 bug修复 (二)第二次作业 作业需求分析 建立类图 checkForUml002实现方式 checkForUml ...

  4. Logstash 的命令行入门 ( 附上相关实验步骤 )

    Logstash 的命令行入门 ( 附上相关实验步骤 ) 在之前的博客中,我们已经在 Macbook Big Sur 环境下安装了 ELK 的相关软件,并且已经可以成功运行对应的模块: 如果没有安装的 ...

  5. Advanced Archive Password Recovery (ARCHPR) 是一个强大的压缩包密码破解工具,适用于ZIP和RAR档案的高度优化的口令恢复工具。

    RAR压缩文件密码破解工具是一款简单易用的RAR文档和ZIP文档密码破解软件,如果你不小心忘了解压密码或是下载的RAR文件需要密码,那么均可以使用本软件进行暴力破解.不管WinRAR /RAR 的密码 ...

  6. 列表 元组 sort

    列表 增append insert extend 迭代增加删 remove delete pop clear改 li[索引]="被修改的内容":切片"" 列表 ...

  7. iozone的使用与介绍-20191105

    https://www.jianshu.com/p/faf82e400aa6 iozone的使用与介绍 0.0722017.05.10 07:40:41字数 550阅读 1817 iozone的使用与 ...

  8. STM32定时器配置

    void TIM1_Int_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDe ...

  9. 技术干货 | 关于 WKWebview 网络拦截,你想知道的都在这里

    原生 WKWebView 在独立于 app 进程之外的进程中执行网络请求,请求数据不经过主进程,因此在 WKWebView 上直接使用 NSURLProtocol 是无法拦截请求的. 但是由于 mPa ...

  10. Apache Jena Fuseki使用

    下载Apache Jena Fuseki 先从apache官网下载fuseki压缩包.然后解压到目标文件夹. apache官网:http://jena.apache.org/download/ 这里我 ...