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. 微信小程序中的常见弹框

    显示加载中的提示框 wx.showLoading() 当我们正在在进行网络请求时,常常就需要这个提示框 手动调用wx.hideLoading()方法才能够关闭这个提示框,通常在数据请求完毕时就应该关闭 ...

  2. HTML中的JavaScript

    HTML中的JavaScript 1.<script>元素 defer:可选.表示脚本可以延迟到文档完全被解析和显示之后再执行.只对外部脚本文件有效. 脚本会被延迟到整个页面都解析完毕后再 ...

  3. Mybatis学习之自定义持久层框架(五) 自定义持久层框架:封装CRUD操作

    前言 上一篇文章我们完成了生产sqlSession的工作,与数据库的连接和创建会话的工作都已完成,今天我们可以来决定会话的内容了. 封装CRUD操作 首先我们需要创建一个SqlSession接口类,在 ...

  4. 比物理线程都好用的C++20的协程,你会用吗?

    摘要:事件驱动(event driven)是一种常见的代码模型,其通常会有一个主循环(mainloop)不断的从队列中接收事件,然后分发给相应的函数/模块处理.常见使用事件驱动模型的软件包括图形用户界 ...

  5. 如何借助CRM销售管理系统提升业绩?

    与传统企业销售模式不同,现代企业在网络背书下,销售活动与网络密切相关.销售数据需要网络保存,销售渠道需要网络挖掘.在线的销售软件让销售活动起到了事半功倍的效果.CRM销售管理系统是企业必不可少的在线软 ...

  6. 『政善治』Postman工具 — 12、Postman中实现数据驱动

    目录 1.什么是数据驱动? 2.测试集说明 3.创建请求与准备数据文件 (1)新增学院结果文档内容如下 (2)编写数据文件 (3)在Postman中创建请求 4.实现Postman中的数据驱动 步骤1 ...

  7. Deepin深度应用商店和系统更新不正常的解决方法

    Deepin深度应用商店和系统更新不正常的解决方法 2020-02-04 10:25:09作者:i8520稿源:深度站 如果你的Deepin深度应用商店和系统更新不正常,可采用以下方法来解决问题. 解 ...

  8. Windows 电脑的四种运行状态工作状态 (Working), S0 睡眠状态 (Sleep), S1 或 S3 休眠状态 (Hibernate), S4 关机状态 (Shutdown), S5

    == Windows 电脑的四种运行状态 == 这四种运行状态(或称电源状态)是: 工作状态 (Working), S0 睡眠状态 (Sleep), S1 或 S3 休眠状态 (Hibernate), ...

  9. nosql数据库之Redis概念及基本操作

    一.概述 redis是一种nosql数据库(非关系型数据库),他的数据是保存在内存中,同时redis可以定时把内存数据同步到磁盘,即可以将数据持久化,并且他比memcached支持更多的数据结构(st ...

  10. 原生基础js脚本实现--在线答题系统

    全部代码在最下面----需要的直接往下翻 html方面的代码  : 正确的答案 value=s <!DOCTYPE html> <html lang="en"&g ...