【题目链接】 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(极角排序)相关推荐

  1. BZOJ.1132.[POI2008]Tro(极角排序)

    BZOJ 洛谷 考虑暴力,每次枚举三个点,答案就是\(\frac12\sum_{k<j<i}(i-k)\times(j-k)\). 注意到叉积有分配率,所以固定\(k\),枚举\(i,j\ ...

  2. bzoj 1132: [POI2008]Tro

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

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

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

  4. 1132: [POI2008]Tro

    Description 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 Input 第一行给出数字N,N在[3,3000] 下面N行给出N个点的坐标,其值在[0,10 ...

  5. bzoj 1914: [Usaco2010 OPen]Triangle Counting 数三角形——极角排序

    Description 在一只大灰狼偷偷潜入Farmer Don的牛群被群牛发现后,贝西现在不得不履行着她站岗的职责.从她的守卫塔向下瞭望简直就是一件烦透了的事情.她决定做一些开发智力的小练习,防止她 ...

  6. bzoj1132 [POI2008]Tro(叉积)

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

  7. [POI2008]Tro

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

  8. 【BZOJ1132】[POI2008]Tro 几何

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

  9. L3-021 神坛(极角排序求三角形最小面积)

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

最新文章

  1. seaborn系列 (16) | 变量关系组图pairplot()
  2. 栈(Stack) 任何程序执行前,预先分配一固定长度的内存空间
  3. 【知识星球】重要小结与涨价预告
  4. mysql常见的sql语法示例
  5. 函数计算搭建小程序Web应用后端服务
  6. Bean 在 Spring 中代表什么含义,为什么这样命名?
  7. android开发java环境_搭建Android开发环境 - Android - mobile - JavaEye论坛
  8. 25个优秀的设计机构网站设计案例
  9. 删除win7多余的系统还原点_【Win7封装教程2019版】系列(二)必要的系统调整
  10. 日常问题——flume连接hive时报错Caused by: java.lang.NoSuchMethodError
  11. 湖北工业大学计算机专硕学费,2019年湖北工业大学硕士研究生学费奖助政策
  12. 互联网晚报 | 8月12日 星期四 | 苏宁易购零售云将迈入“万店时代”;理想汽车今日港股上市;好未来励步推素质教育新产品...
  13. 【51nod 1154】 回文串划分
  14. jni java与c++交互返回三维数组jobjectArray
  15. 【脑电数据十折交叉验证】实现对数据自动划分训练集与测试集得出平均分类准确率
  16. 机器学习之监督学习-分类模型K近邻(KNN)算法实现
  17. 编程题_排列组合问题
  18. sam格式的结构和意义_sam格式详细说明
  19. laravel获取最后一条
  20. JINI和java space入门

热门文章

  1. 利用逆矩阵解线性方程组_QR方法求解矩阵所有特征值(一)
  2. 怎样做网络推广浅析网站被K之后,优化人员们要注意的方面是哪些?
  3. java改成c语言专业名词解释,求助大神!!!JAVA转换成C语言
  4. php behaviors,详解在PHP的Yii框架中使用行为Behaviors的方法_php技巧
  5. java判断时间是不是星期五_Java判断当前日期是星期几
  6. android 取消和svn关联_Android Studio如何取消与SVN的关联
  7. 怎样用python自动化办公_会python基础,如何学习自动化办公?
  8. LSTM UEBA异常检测——deeplog里其实提到了,就是多分类LSTM算法,结合LSTM预测误差来检测异常参数...
  9. leetcode 191. Number of 1 Bits
  10. 第11章:MongoDB-CRUD操作--文档--查询