【BZOJ1132】[POI2008]Tro 几何
【BZOJ1132】[POI2008]Tro
Description
平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000
Input
第一行给出数字N,N在[3,3000] 下面N行给出N个点的坐标,其值在[0,10000]
Output
保留一位小数,误差不超过0.1
Sample Input
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 几何相关推荐
- bzoj1132 [POI2008]Tro(叉积)
bzoj1132 [POI2008]Tro 原题地址:http://www.lydsy.com/JudgeOnline/problem.php?id=1132 题意: 平面上有N个点. 求出所有以这N ...
- BZOJ1132: [POI2008]Tro
所以为啥用long long本地能过所有数据交上去就WA,一定要改int啊 一开始写了个用点到直线距离公式的,维护两个指针扫过去 emmmmmm并不能过样例,因为有根号什么的东西,调不动-. 膜题解发 ...
- bzoj1132:[POI2008]Tro
[传送门])(https://www.lydsy.com/JudgeOnline/problem.php?id=1132) 自己的计算几何还是挺渣的呢. 其实只要考虑一下叉积的式子就可以想到前缀和了, ...
- [BZOJ1132][POI2008]Tro(计算几何)
题目描述 传送门 题目大意:平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和. 题解 枚举每一个点,以它为原点建立平面直角坐标系,然后其他的点按照极角排序. 向量的叉积满足分配律,所以可以t ...
- bzoj1132 [POI2008]Tro
题目描述 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 输入 第一行给出数字N,N在[3,3000] 下面N行给出N个点的坐标,其值在[0,10000] 输出 保留 ...
- bzoj 1132: [POI2008]Tro
1132: [POI2008]Tro Time Limit: 20 Sec Memory Limit: 162 MB Submit: 1663 Solved: 558 [Submit][Statu ...
- [POI2008]Tro
题面 <center>2042: [POI2008]Tro<center> <center>时间限制:20秒 内存限制:162MB<center> 题目 ...
- 【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 ...
- 【bzoj1132】[POI2008]Tro 计算几何
按照横坐标为第一关键字,纵坐标为第二关键字排序, 枚举每个点作为原点 把再它后面的点拿出来,求每一对点与原点构成的三角形的面积 abs(a[i].x*a[j].y-a[i].y*a[j].x) 如果能 ...
最新文章
- python学习总目录
- C++ OpenGL透明纹理源码
- hive随机抽取100条数据_用Excel进行随机抽取数据
- matlab字体设置
- MySQL5.7 group by新特性报错1055的解决办法
- codevs1026 逃跑的拉尔夫
- java基础总结06-常用api类-BigDecimal-精确计算
- 单龙芯3A3000-7A1000PMON研究学习-(13)撸起袖子干-make的过程
- android投屏功能开发,Android DLNA投屏-基于CyberGarage开发投屏功能
- 2020年最新版CSDN博客排名第一名的博客
- 入职阿里巴巴的正确姿势
- 999宝藏网尼古拉斯电脑城装机版V6.0
- 距离多普勒谱(RD谱)绘制方法及理解
- CRM系统操作权限的实现
- pandownload使用cookie登录
- 北航计算机学院编译技术,北航编译技术在线作业一二三
- CSDN联合安恒信息 共同发布安全开发工程师能力标准
- Kubernetes_介绍
- SAE J1850 汽车总线协议 VPW 物理层驱动程序在STM32芯片上的实现
- Eclipse Helios(3.6.2)下载地址
热门文章
- 【数据库连接问题】【靶场访问错误】Table ‘xxx‘ doesn‘t exist,文件‘Not Find‘ 可能是管理软件与终端本身的一个连接问题
- 我的浏览器收藏夹分类
- MATLAB处理高光谱图像数据
- 【TypeScript】TS基础
- 3D人体重建从单张图中-DeepHuman: 3D Human Reconstruction from a Single Image
- 用c语言画出一个五角星图案,用c语言画出一个五角星图案.doc
- try 与catch的作用
- 365gps怎样修改服务器,gps365定位器怎么用(gps定位器ID号怎么获取)
- __name__ == ‘__main__‘ 是什么意思
- Amino-PEG8-acid,NH2-PEG8-COOH相关的物理性质,756526-04-2