L3-021 神坛 (30 分)

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

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

输入格式:

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

输出格式:

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

输入样例:

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

输出样例:

0.500

样例解释

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

思路:

对于一个点A,把其他点与这个点构成的向量按照逆时针排序

比如向量AB,就是用B的横纵左边分别减去A的横纵坐标。

那么A点与其他点构成的向量集合,就是从A发出n-1道光。

逆时针排序后,由点ABC构成的最小三角形,点BC肯定相邻,那么就判断一下谁构成的面积最小就可以了。

(注:三角形的面积=abs(x1*y2-y2*x1)/2)

要注意的是:

float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;

double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。

开始我用double存的坐标点,然后一直错= =!然后才发现题目点的左边范围是1e9级别的,所以用double存边,求面积的时候就会爆,用long long存边,然后把ans也设成long long型的,最后再(double)ans/2

代码如下:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<queue>
#include<stack>
#include<cmath>
#include<set>
#include<map>
using namespace std;
#define ll long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
typedef pair<int,int>P;
const int INF=0x3f3f3f3f;
const int N=5015,mod=32767;
struct A{ll x,y;
}qq[N],tmp[N];bool cmp(A a,A b){return a.x*b.y>a.y*b.x;
}int main(){int n;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%lld%lld",&qq[i].x,&qq[i].y);}double ans=2e18;for(int i=0;i<n;i++){int k=0;for(int j=0;j<n;j++){if(j==i)continue;tmp[k].x=qq[j].x-qq[i].x;tmp[k++].y=qq[j].y-qq[i].y;}sort(tmp,tmp+k,cmp);for(int j=0;j<k;j++)ans=min(ans,abs(0.5*(tmp[j].x*tmp[(j+1)%k].y-tmp[(j+1)%k].x*tmp[j].y)));}printf("%.3f\n",ans);
}

L3-021 神坛 - 计算几何相关推荐

  1. L3-021 神坛 (30 分) 计算几何

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

  2. 【CCCC】L3-021 神坛 (30分)计算几何+求三角形面积(极角排序)

    problem L3-021 神坛 (30分) 在古老的迈瑞城,巍然屹立着 n 块神石.长老们商议,选取 3 块神石围成一个神坛.因为神坛的能量强度与它的面积成反比,因此神坛的面积越小越好.特殊地,如 ...

  3. 【CCCC】PAT : 团体程序设计天梯赛-练习集 L3 答案(01-23)

    [CCCC]PAT : 团体程序设计天梯赛-练习集 L3 答案 顶着满课,整整一星期,终于咕完了.(:´д`)ゞ 知识点分类(23): 1.搜索模拟(5):BFS,DFS,最短路,路径打印 2.计算几 ...

  4. 【每日亿题#12】AtCoder Grand Contest 021 (A ~ F)全部题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 文章目录 AtCoder Grand Contest 021 题解 A. Digit Sum 2 B. ...

  5. poj2826 An Easy Problem?!(计算几何)

    传送门 •题意 两根木块组成一个槽,给定两个木块的两个端点 雨水竖直下落,问槽里能装多少雨水, •思路 找不能收集到雨水的情况 我们令线段较高的点为s点,较低的点为e点 ①两条木块没有交点 ②平行或重 ...

  6. PAT : 团体程序设计天梯赛-练习集 L3 答案即比赛技巧

    知识点分类(23): 1.搜索模拟(5):BFS,DFS,最短路,路径打印 2.计算几何(5):找规律,斜率计算,极角排序,三角形面积,三点共线,凸包 3.数据结构(5):栈,并查集,二叉树,堆,线段 ...

  7. cat 021 解析

    cat 021 解析 把 https://blog.csdn.net/qingfengleerge/article/details/81102854#commentBox 代码改了下,不依赖vs,去掉 ...

  8. python 计算面积 比计算几何慢_计算几何相关 - osc_kbyywydz的个人空间 - OSCHINA - 中文开源技术交流社区...

    计算几何相关 ##向量表示法 这里最适合的就是用一个二维点对$(a,b)$来表示了. ##点积 ${a.xb.x+a.yb.y}$ 在向量的含义下:$\vec{a}·\vec{b}=|\vec{a}| ...

  9. 什么是L1/L2/L3 Cache?

    什么是L1/L2/L3 Cache? Cache Memory也被称为Cache,是存储器子系统的组成部分,存放着程序经常使用的指令和数据,这就是Cache的传统定义.从广义的角度上看,Cache是快 ...

最新文章

  1. Python的零基础超详细讲解(第八天)-Python的条件判断
  2. linux centos 安装配置tftp服务器
  3. 基于nanopi的即时通讯系统
  4. access里面的表达式运用_Access表达式解析
  5. internal compiler error: Killed (program cc1plus)
  6. 5g通用模组是什么_中国移动联合芯讯通发布5G终端、芯片及测试产业报告
  7. ubuntu系统设置开机自启动
  8. 致歉!抖音Semi Design承认参考阿里Ant Design
  9. Git操作,有时候会遇到“git did not exit cleanly (exit code 128)”错误
  10. 挂钩Windows API
  11. 如果你正在使用CocoaPods,你的.gitignore会有什么?
  12. VS2022支持.net4.0和.net4.5SDK
  13. C++之boost库报错:note: in expansion of macro BOOST_MPL_ASSERT_NOT
  14. 三维计算机视觉(七)--Spin image
  15. c语言设计题库及详解答案,(完整版)C语言程序设计题库及答案,推荐文档
  16. matlab errorbar 例子,科学网—【MATLAB】如何画水平errorbar - 叶瑞杰的博文
  17. 阿里 Maven仓库
  18. 华为mate40营销之我见
  19. 小波神经网络(时间序列预测)
  20. react-native 性能优化,处理卡顿

热门文章

  1. zb怎么做渲染图_美术丨教程:使用ZBrush渲染制作女神的衣物和皮肤
  2. Docker学习笔记2——Docker组件(幕布笔记)
  3. 组织结构流程图模板分享,送给需要的你
  4. 人工智能芯片发展 (1
  5. Matlab 新建文件夹和重命名文件夹
  6. 计算机科学与技术专业未来规划,大一计算机科学与技术专业职业生涯发展规划书...
  7. 3DS MAX 常用快捷键
  8. java实现pdf转word,解决个别排版错乱问题
  9. Eudemon在配置了NAT与ACL时对数据包处理流程
  10. 【ARM】——Neon Intrinsics