题目描述

传送门

题目大意:平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和。

题解

枚举每一个点,以它为原点建立平面直角坐标系,然后其他的点按照极角排序。
向量的叉积满足分配律,所以可以two pointer一下,每一次右指针移动到最后一个与左指针夹角小于180°的地方,然后每加入一个向量,计算一下这个向量与两个指针之间所有向量的叉积,利用分配律。
看了PoPoQQQ的题解才发现,其实不用这么麻烦,可以将第一、四象限和x、y轴正半轴上的点按照极角排序,然后维护一个前缀和
原来是用了愚蠢的方法死慢死慢
不过这题还卡精度,建议全程int/long long,最后先*10再手动除

代码

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
#define N 6005const double pi=acos(-1.0);
struct Vector
{int x,y;double ang;Vector(int X=0,int Y=0){x=X,y=Y;ang=atan2((double)y,(double)x);}bool operator < (const Vector &a) const{return ang<a.ang;}
};
typedef Vector Point;int n,vx,vy,x[N],y[N];
long long ans;
Point q[N];long long Abs(long long x){return (x>0)?x:-x;}
int main()
{scanf("%d",&n);for (int i=1;i<=n;++i) scanf("%d%d",&x[i],&y[i]);for (int i=1;i<=n;++i){int cnt=0;for (int j=1;j<=n;++j)if (i!=j) q[++cnt]=Point(x[j]-x[i],y[j]-y[i]);sort(q+1,q+cnt+1);for (int i=1;i<=cnt;++i) q[cnt+i]=q[i],q[cnt+i].ang+=2*pi;int l=1,r=0;while (l<=cnt){if (l>r) r=l,vx=0,vy=0;while (r<=cnt<<1&&q[r].ang<q[l].ang+pi){ans+=Abs((long long)q[r].x*vy-(long long)q[r].y*vx);if (r<=cnt) vx+=q[r].x,vy+=q[r].y;++r;}vx-=q[l].x,vy-=q[l].y;++l;}}ans=ans*5/3;printf("%lld.%lld\n",ans/10,ans%10);
}

[BZOJ1132][POI2008]Tro(计算几何)相关推荐

  1. bzoj1132 [POI2008]Tro(叉积)

    bzoj1132 [POI2008]Tro 原题地址:http://www.lydsy.com/JudgeOnline/problem.php?id=1132 题意: 平面上有N个点. 求出所有以这N ...

  2. 【bzoj1132】[POI2008]Tro 计算几何

    按照横坐标为第一关键字,纵坐标为第二关键字排序, 枚举每个点作为原点 把再它后面的点拿出来,求每一对点与原点构成的三角形的面积 abs(a[i].x*a[j].y-a[i].y*a[j].x) 如果能 ...

  3. bzoj1132:[POI2008]Tro

    [传送门])(https://www.lydsy.com/JudgeOnline/problem.php?id=1132) 自己的计算几何还是挺渣的呢. 其实只要考虑一下叉积的式子就可以想到前缀和了, ...

  4. 1132: [POI2008]Tro 计算几何

    首先O(N^3)是不科学的..我们起码要想办法优化到O(N^2logN). 考虑每次枚举一个点,以它作为一个顶点,然后维护一个前缀和来计算每个点与夹角在逆时针180°内的点(我表述的不好..边界可以二 ...

  5. BZOJ1132: [POI2008]Tro

    所以为啥用long long本地能过所有数据交上去就WA,一定要改int啊 一开始写了个用点到直线距离公式的,维护两个指针扫过去 emmmmmm并不能过样例,因为有根号什么的东西,调不动-. 膜题解发 ...

  6. bzoj1132 [POI2008]Tro

    题目描述 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 输入 第一行给出数字N,N在[3,3000] 下面N行给出N个点的坐标,其值在[0,10000] 输出 保留 ...

  7. 【BZOJ1132】[POI2008]Tro 几何

    [BZOJ1132][POI2008]Tro Description 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 Input 第一行给出数字N,N在[3,3000 ...

  8. [POI2008]Tro

    题面 <center>2042: [POI2008]Tro<center> <center>时间限制:20秒 内存限制:162MB<center> 题目 ...

  9. bzoj 1132: [POI2008]Tro

    1132: [POI2008]Tro Time Limit: 20 Sec  Memory Limit: 162 MB Submit: 1663  Solved: 558 [Submit][Statu ...

最新文章

  1. linux ulimit命令 控制shell执行程序的资源
  2. 关于Cloud各种组件的停更/升级/替换
  3. 详解京东商城智能对话系统(生成+检索)
  4. HttpServletResponse和HttpServletRequest详解——Web网络学习笔记
  5. 系统实施基础:系统实施的相关知识介绍
  6. EasyExcel入门使用
  7. 轻量型thttpd+php5
  8. Java服务器多站点,java客户端web服务器连接到多个web服务器
  9. Mac上功能强大图片查看编辑工具:zGallery
  10. 【算法笔记】最短路-Dijkstra、Floyd、SPFA模版总结+复习
  11. Linux内核模块编程入门( 最简单的内核模块编程)
  12. 各种常用的默认端口号归纳
  13. html 加爱心符号,心形符号大全
  14. B - Silly Mistake set +思维
  15. ssh “Missing privilege separation directory: /run/sshd“
  16. 乐高机器人走进图书馆活动方案_乐高机器人制作~~乐高大派对
  17. PTA 天梯赛L1 7-3 跳一跳 (15 分) C语言AC题解【仅供分享】
  18. 解决Android调试微信页面,chrome的inspect弹出空白
  19. 思考(七十四):一个游戏后端分布式事务架构介绍
  20. 全球与中国的前50家最佳网站

热门文章

  1. Learning to Sample
  2. qq第三方登录常见错误码信息对照表
  3. Java语言-概念-Swing概述
  4. 信息学奥赛一本通(c++):1168:大整数加法
  5. 在江西景德镇,连垃圾桶都是青花瓷的。。。
  6. 先有鸡还是先有鸡蛋?计算机语言发展史给出的答案
  7. 三、 mysqlbinlog使用简介
  8. 五年之内,博士学历也会开始内卷了?
  9. 个人收藏的50部经典UMD电影的ISO镜像文件
  10. 数据结构之查找(六)——平衡二叉树(AVL树)