【BZOJ1132】[POI2008]Tro

Description

平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000

Input

第一行给出数字N,N在[3,3000] 下面N行给出N个点的坐标,其值在[0,10000]

Output

保留一位小数,误差不超过0.1

Sample Input

5
0 0
1 2
0 2
1 0
1 1

Sample Output

7.0

题解:我们将所有点按x排序,枚举最左面的点。设当前点为i,我们想计算右面所有点对与其形成三角形的面积和。回忆起叉积的式子了吗?我们其实就是想计算$\sum\limits_{j>i}\sum\limits_{k>j}|aj*bk-ak*bj|$,其中aj=xj-xi,以此类推。

但是有绝对值怎么办?按斜率排序去绝对值即可。然后呢?前缀和优化一下就行了。

由于卡精,本题坐标要用int,斜率用double,答案用long long,并且输出的时候要当成整数输出!

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
const int maxn=3010;
typedef long long ll;
int n;
struct point
{int x,y;double a;point() {}point(int _1,int _2) {x=_1,y=_2,a=!x?1e10:(double)y/x;}
}p[maxn],q[maxn];
ll ans,sx,sy;
bool cmpx(point a,point b)
{return (a.x==b.x)?(a.y<b.y):(a.x<b.x);
}
bool cmpa(point a,point b)
{return a.a<b.a;
}
inline int rd()
{int ret=0,f=1;   char gc=getchar();while(gc<'0'||gc>'9')  {if(gc=='-')f=-f;  gc=getchar();}while(gc>='0'&&gc<='9')  ret=ret*10+gc-'0',gc=getchar();return ret*f;
}
int main()
{n=rd();int i,j;for(i=1;i<=n;i++)   p[i].x=rd(),p[i].y=rd();sort(p+1,p+n+1,cmpx);for(i=1;i<=n-2;i++){for(j=i+1;j<=n;j++)    q[j-i]=point(p[j].x-p[i].x,p[j].y-p[i].y);sort(q+1,q+n-i+1,cmpa);for(sx=sy=0,j=n-i;j;j--)    ans+=q[j].x*sy-sx*q[j].y,sy+=q[j].y,sx+=q[j].x;}printf("%lld.%d\n",ans>>1,(ans&1)?5:0);return 0;
}

转载于:https://www.cnblogs.com/CQzhangyu/p/7501151.html

【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

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

  3. bzoj1132:[POI2008]Tro

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

  4. [BZOJ1132][POI2008]Tro(计算几何)

    题目描述 传送门 题目大意:平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和. 题解 枚举每一个点,以它为原点建立平面直角坐标系,然后其他的点按照极角排序. 向量的叉积满足分配律,所以可以t ...

  5. bzoj1132 [POI2008]Tro

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

  6. bzoj 1132: [POI2008]Tro

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

  7. [POI2008]Tro

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

  8. 【bzoj1132】[POI2008] Tro

    水题,用来巩固一下叉积. cross(u,v)=xuyv−xvyucross(u,v)=x_uy_v-x_vy_u,其除以2就是u⃗ \vec{u}到v⃗ \vec{v}形成的有向面积.如果保证v在u ...

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

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

最新文章

  1. python学习总目录
  2. C++ OpenGL透明纹理源码
  3. hive随机抽取100条数据_用Excel进行随机抽取数据
  4. matlab字体设置
  5. MySQL5.7 group by新特性报错1055的解决办法
  6. codevs1026 逃跑的拉尔夫
  7. java基础总结06-常用api类-BigDecimal-精确计算
  8. 单龙芯3A3000-7A1000PMON研究学习-(13)撸起袖子干-make的过程
  9. android投屏功能开发,Android DLNA投屏-基于CyberGarage开发投屏功能
  10. 2020年最新版CSDN博客排名第一名的博客
  11. 入职阿里巴巴的正确姿势
  12. 999宝藏网尼古拉斯电脑城装机版V6.0
  13. 距离多普勒谱(RD谱)绘制方法及理解
  14. CRM系统操作权限的实现
  15. pandownload使用cookie登录
  16. 北航计算机学院编译技术,北航编译技术在线作业一二三
  17. CSDN联合安恒信息 共同发布安全开发工程师能力标准
  18. Kubernetes_介绍
  19. SAE J1850 汽车总线协议 VPW 物理层驱动程序在STM32芯片上的实现
  20. Eclipse Helios(3.6.2)下载地址

热门文章

  1. 【数据库连接问题】【靶场访问错误】Table ‘xxx‘ doesn‘t exist,文件‘Not Find‘ 可能是管理软件与终端本身的一个连接问题
  2. 我的浏览器收藏夹分类
  3. MATLAB处理高光谱图像数据
  4. 【TypeScript】TS基础
  5. 3D人体重建从单张图中-DeepHuman: 3D Human Reconstruction from a Single Image
  6. 用c语言画出一个五角星图案,用c语言画出一个五角星图案.doc
  7. try 与catch的作用
  8. 365gps怎样修改服务器,gps365定位器怎么用(gps定位器ID号怎么获取)
  9. __name__ == ‘__main__‘ 是什么意思
  10. Amino-PEG8-acid,NH2-PEG8-COOH相关的物理性质,756526-04-2