在古老的迈瑞城,巍然屹立着 $n$ 块神石。长老们商议,选取 3 块神石围成一个神坛。因为神坛的能量强度与它的面积成反比,因此神坛的面积越小越好。特殊地,如果有两块神石坐标相同,或者三块神石共线,神坛的面积为 0.000

长老们发现这个问题没有那么简单,于是委托你编程解决这个难题。

输入格式:

输入在第一行给出一个正整数 $n$($3\leq n\leq 5000$)。随后 $n$ 行,每行有两个整数,分别表示神石的横坐标、纵坐标($-10^9\leq 横坐标、纵坐标<  10^9$)。

输出格式:

在一行中输出神坛的最小面积,四舍五入保留 3 位小数。

输入样例:

8
3 4
2 4
1 1
4 1
0 3
3 0
1 3
4 2
 

输出样例:

0.500
 

样例解释

输出的数值等于图中红色或紫色框线的三角形的面积。

传送门:

https://pintia.cn/problem-sets/994805046380707840/problems/994805046577840128

思路:

一道计算几何的题目,用极角排序来进行解答。

极角:平面上任何一点的连线和极轴的夹角,极角排序就是根据极角的大小进行排序。

假设有三点$A,B,C$(其中A为原点),则$\Theta _B=\tfrac{y_B-y_A}{x_B-x_A},\Theta _C=\tfrac{y_C-y_A}{x_C-x_A}$,

要比较$\Theta _B和\Theta _C$,其实就是判断$(x_C-x_A)(y_B-y_A)$和$(x_B-x_A)(y_C-y_A)$的大小。

我们枚举点$A$,来对极角进行排序。

代码:

 #include<bits/stdc++.h>

 using namespace std;

 typedef long long ll;
struct point
{
ll x;
ll y;
}; point p[];
point e[]; bool cmp(point a, point b)
{
return a.x * b.y < a.y * b.x;
}
int main() {
int n;
scanf("%d", &n); for(int i = ; i <= n; i++)
{
scanf("%lld%lld", &p[i].x, &p[i].y);
}
double ans = 1e18;
for(int i = ; i <= n; i++) {
int cnt = ;
for(int j = ; j <= n; j++)
{
if(i != j)
{
e[cnt].x = p[i].x - p[j].x;
e[cnt].y = p[i].y - p[j].y;
cnt++;
}
} sort(e, e + cnt, cmp);
for(int j = ; j < cnt; j++)
ans = min(ans, 1.0 * abs(e[j].x * e[j - ].y - e[j].y * e[j - ].x));
}
ans = ans / 2.0;
printf("%.3lf\n", ans);
}

GPLT L3-021 神坛的更多相关文章

  1. CCCC L2-001 紧急救援 floyd改的dijkstra模板 (记录路径) L3 天梯地图

    https://www.patest.cn/contests/gplt/L2-001 题解:求最短路的条数,并输出点的权值最大的路径,用priority_queue会wa两个点,原因不明. 于是又学了 ...

  2. 配置 L3 agent - 每天5分钟玩转 OpenStack(99)

    上一节我们介绍了路由服务(Routing)的基本功能,今天教大家如何配置. Neutron 的路由服务是由 l3 agent 提供的. 除此之外,l3 agent 通过 iptables 提供 fir ...

  3. Neutron 理解 (6): Neutron 是怎么实现虚拟三层网络的 [How Neutron implements virtual L3 network]

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

  4. 理解 OpenStack 高可用(HA)(2):Neutron L3 Agent HA 之 虚拟路由冗余协议(VRRP)

    本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...

  5. php大力力 [021节]mysql表名在mac下不能大写

    2015-08-27 php大力力021.mysql表名在mac下不能大写 刚才数据库里面,phpMyAdmin狂出错. Some errors have been detected on the s ...

  6. [Freescale]Freescale L3.14.52_1.1.0 yocto build

    可参照:http://blog.csdn.net/wince_lover/article/details/51456745 1. Refer to <基于i.mx6处理器的Yocto项目及Lin ...

  7. [反汇编练习] 160个CrackMe之021

    [反汇编练习] 160个CrackMe之021. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  8. 【面试题021】包含min函数的栈

    [面试题021]包含min函数的栈  MinStack.cpp: 1234567891011121314151617181920212223242526272829303132333435363738 ...

  9. 团体程序设计天梯赛-练习集L1-023. 输出GPLT

    L1-023. 输出GPLT 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一个长度不超过10000的.仅由英文字母构成的 ...

随机推荐

  1. bzoj 4754: [Jsoi2016]独特的树叶

    不得不说这是神题. %%%   http://blog.csdn.net/samjia2000/article/details/51762811 #include <cstdio> #in ...

  2. java理解抽象类 2.19

    // Telphone.java public abstract class Telphone{ public abstract void call(); public abstract void m ...

  3. 九宫格 android:stretchMode="columnWidth",缩放与列宽大小同步

    转载▼   <GridView android:id="@+store/grid" android:layout_width="wrap_content" ...

  4. dom与jq基础使用

    js有两种运行环境,一个是浏览器,一个是服务器(NodeJS) js的本质是es,因为运行环境的不同,为了操作环境内的api做了升级 在浏览器上js分为es + dom + bom 在服务器上js又有 ...

  5. 使用conda创建虚拟环境

    conda创建python虚拟环境 前言 conda常用的命令: conda list 查看安装了哪些包. conda env list 或 conda info -e 查看当前存在哪些虚拟环境 co ...

  6. a标签的超链接提交form表单

    <form action="/home/search" method="get" id="search_form"><di ...

  7. 2.python的基本数据类型

    (1)整形和浮点型 (2)布尔 (3)字符串 (4)转义 (5)字符串的操作 (6)列表 (7)元组 (8)集合set 特性:无序.不重复 (9)字典

  8. 开发者在行动-政府侧IT需求志愿者招募令(第一弹)

    京东云与AI推出了[应急资源信息发布平台],在打通物资供需的同时,各地政府及公益组织可发布疫情信息化产品开发及运维服务的IT需求,如疫情防控统计.物资供需信息收集等IT管理.需求通过评审后平台将帮助发 ...

  9. webpack随笔2--编译ES6/ES7

    一.Babel 1.安装babel Bable-loader: babeljs.io babel最新版:npm install babel-loader@8.0.0-beta.0 @babel/cor ...

  10. c++程序—switch分支

    #include<iostream> using namespace std; #include<string> int main() { //多元分支 cout <&l ...