BZOJ 1132 [POI2008]Tro(极角排序)
【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=1132
【题目大意】
平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和(N<=3000)
【题解】
我们发现直接枚举三个点计算会造成很大部分的叉积重复被计算,
因此我们枚举i,计算pj和pi点差的后缀和,我们发现对于固定边ij,
其与后面的枚举量相关贡献就为pj-pi和点差后缀和的叉积。
因此我们针对每个i进行后面数据的极角排序,O(n)计算与i相关的所有答案贡献。
【代码】
#include <algorithm>
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long LL;
struct Point{int x,y; int index;Point(){} Point(int x1,int y1){x=x1;y=y1;}Point operator +(const Point &b)const{return Point(x+b.x,y+b.y);} Point operator -(const Point &b)const{return Point(x-b.x,y-b.y);} int operator *(const Point &b)const{return x*b.x+y*b.y;} //点积LL operator ^(const Point &b)const{return (LL)x*b.y-(LL)y*b.x;} //叉积
};
double dist(Point a,Point b){return sqrt((a-b)*(a-b));}
int pos; Point p[3010];
bool cmp(Point a,Point b){LL tmp=(a-p[pos])^(b-p[pos]);if(tmp==0)return dist(p[pos],a)<dist(p[pos],b);else if(tmp<0)return false;else return true;
}
int n;
int main(){while(~scanf("%d",&n)){for(int i=1;i<=n;i++){scanf("%d%d",&p[i].x,&p[i].y);}LL ans=pos=0;sort(p+1,p+n+1,cmp);for(int i=1;i<=n-2;i++){p[0].x=p[0].y=0;pos++;sort(p+i+1,p+n+1,cmp);for(int j=i+1;j<=n;j++)p[0]=p[0]+(p[j]-p[i]);for(int j=i+1;j<=n;j++){p[0]=p[0]-(p[j]-p[i]);ans+=(p[j]-p[i])^p[0];}}if(ans&1)printf("%lld.5\n",ans>>1);else printf("%lld.0\n",ans>>1);}return 0;
}
转载于:https://www.cnblogs.com/forever97/p/bzoj1132.html
BZOJ 1132 [POI2008]Tro(极角排序)相关推荐
- BZOJ.1132.[POI2008]Tro(极角排序)
BZOJ 洛谷 考虑暴力,每次枚举三个点,答案就是\(\frac12\sum_{k<j<i}(i-k)\times(j-k)\). 注意到叉积有分配率,所以固定\(k\),枚举\(i,j\ ...
- bzoj 1132: [POI2008]Tro
1132: [POI2008]Tro Time Limit: 20 Sec Memory Limit: 162 MB Submit: 1663 Solved: 558 [Submit][Statu ...
- 1132: [POI2008]Tro 计算几何
首先O(N^3)是不科学的..我们起码要想办法优化到O(N^2logN). 考虑每次枚举一个点,以它作为一个顶点,然后维护一个前缀和来计算每个点与夹角在逆时针180°内的点(我表述的不好..边界可以二 ...
- 1132: [POI2008]Tro
Description 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 Input 第一行给出数字N,N在[3,3000] 下面N行给出N个点的坐标,其值在[0,10 ...
- bzoj 1914: [Usaco2010 OPen]Triangle Counting 数三角形——极角排序
Description 在一只大灰狼偷偷潜入Farmer Don的牛群被群牛发现后,贝西现在不得不履行着她站岗的职责.从她的守卫塔向下瞭望简直就是一件烦透了的事情.她决定做一些开发智力的小练习,防止她 ...
- bzoj1132 [POI2008]Tro(叉积)
bzoj1132 [POI2008]Tro 原题地址:http://www.lydsy.com/JudgeOnline/problem.php?id=1132 题意: 平面上有N个点. 求出所有以这N ...
- [POI2008]Tro
题面 <center>2042: [POI2008]Tro<center> <center>时间限制:20秒 内存限制:162MB<center> 题目 ...
- 【BZOJ1132】[POI2008]Tro 几何
[BZOJ1132][POI2008]Tro Description 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 Input 第一行给出数字N,N在[3,3000 ...
- L3-021 神坛(极角排序求三角形最小面积)
在古老的迈瑞城,巍然屹立着 n 块神石.长老们商议,选取 3 块神石围成一个神坛.因为神坛的能量强度与它的面积成反比,因此神坛的面积越小越好.特殊地,如果有两块神石坐标相同,或者三块神石共线,神坛的面 ...
最新文章
- Kotlin数组(Array)
- Python3异常处理
- 判断对象是否存在某个属性
- c语言算ex自定义函数,用C语言写定积分的通用函数:sin(x),cos(x),eX.
- git merge用法_Git 基本命令 merge 和 rebase,你真的了解吗?
- 手把手带你阅读Mybatis源码(二)执行篇
- 下载silverlight官网的全部视频教程
- 对于通用计算机而言,《计算机操作系统》第二次作业
- python hello world程序代码_第一个python程序 helloworld
- 工程物资云平台_SaaS产品设计说明书(PRD)_施工企业工程项目物资材料管理软件系统
- 嵌入式开发 | 嵌入式开发设计文档该怎么写?
- boder-radius四个值的问题,boder-radius超出四个值的问题
- html根据出生日期计算星座,0047 JavaScript实现根据输入日期计算所属星座
- TestCenter IGMP Proxy组播测试(bridge)
- 数学三次危机(三)“希帕索斯悖论”或“毕达哥拉斯悖论”
- GODI2018基站
- ·使用Xtext/Xtend 实现域专用语言DSL(1)
- ConnectBot的使用
- 霍夫曼树(赫夫曼树、哈夫曼树)
- 新手亲自踩坑!Jmter使用CSV Data Set Config配置原件测试登录接口,察看结果树无响应问题
热门文章
- python所有函数用法_python函数用法总结
- python数独解题器,Python中最短的数独求解器 – 它是如何工作的?
- 网络营销——网络营销专员浅析网站推广营销关键词是重点
- 浅析网站站内优化重要因素都有哪些?
- 多个切点 boot spring_全网独家Spring/Cloud/MVC/Boot,脑图+面试+进阶,就问你服不服?...
- _ISD-SMG518L2CT-F 海康威视测温人脸安检门 温度精度±0.5℃ 人脸抓拍金属探测
- java+caching+system_浅谈Spring boot cache使用和原理
- python global用法_14_手把手教你学Python之函数(下)
- RecyclerView IndexOutOfBoundException
- lucene Index Store TermVector 说明