1132: [POI2008]Tro

Time Limit: 20 Sec  Memory Limit: 162 MB
Submit: 1663  Solved: 558
[Submit][Status][Discuss]

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, Y)

对于当前点(X, Y),暴力其它所有点(x, y),将每个点先处理为(x', y') = (x-X, y-Y)

这样当前点对答案的贡献就为(还要除以2)

所有点按x从小到大排序,然后按顺序枚举(X, Y),以(X, Y)为源点后,剩下点再按幅角排序,那么上面公式的每一项就一定都为正,就可以去掉绝对值

化简公式有

对于yb'和xb'求前缀和,就可以O(n)算出贡献了

复杂度O(n*(nlogn+n))=O(n²logn)

注意上面公式算的是四边形面积,所以答案要除以2,还有要去重

#include<stdio.h>
#include<algorithm>
using namespace std;
#define LL long long
int X, Y;
typedef struct Point
{int x, y;bool operator < (const Point &b) const{if((x-X)*(b.y-Y)>(y-Y)*(b.x-X))return 1;return 0;}
}Point;
Point s[6005];
bool comp(Point a, Point b)
{if(a.x<b.x || a.x==b.x && a.y<b.y)return 1;return 0;
}
int main(void)
{LL ans;int n, i, j, sy, sx;scanf("%d", &n);for(i=1;i<=n;i++)scanf("%d%d", &s[i].x, &s[i].y);sort(s+1, s+n+1, comp);ans = 0;for(i=1;i<=n;i++){X = s[i].x, Y = s[i].y;for(j=i+1;j<=n;j++)s[n+j-i].x = s[j].x, s[n+j-i].y = s[j].y;sort(s+n+1, s+n+n-i+1);sx = sy = 0;for(j=n+1;j<=n+n-i;j++){ans += (LL)(s[j].y-Y)*sx-(LL)(s[j].x-X)*sy;sx += s[j].x-X;sy += s[j].y-Y;}}if(ans%2==0)printf("%lld.0\n", ans/2);elseprintf("%lld.5\n", ans/2);
}

bzoj 1132: [POI2008]Tro相关推荐

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

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1132 [题目大意] 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和(N&l ...

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

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

  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. bzoj1132 [POI2008]Tro(叉积)

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

  6. [POI2008]Tro

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

  7. 【BZOJ1132】[POI2008]Tro 几何

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

  8. BZOJ 1132 Tro

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

  9. BZOJ 1124: [POI2008]枪战Maf(构造 + 贪心)

    题意 有 \(n\) 个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪. 因此,对于不同的开枪顺序,最后死的人也不同. 问最 ...

最新文章

  1. 交叉科学不仅不是边缘学科,反而应是科研主流
  2. python caffe报错:No module named google
  3. SpringCloud之Feign源码分析
  4. 深度洞见|起底元宇宙风潮,如何重塑未来数字营销?
  5. java rest 图_SpringMVC视图及REST风格
  6. ABAP R3 时代著名的 SFLIGHT 航班模型测试数据,到了S/4HANA时代的进化版
  7. 未来计算机打蜡机,电脑洗车机的未来发展方向:多样化or精简化?
  8. JBoss Fuse:使用JEXL的动态蓝图文件
  9. c++语言怎么从internet上某个时间服务器获取时间信息,在VC++中实现同步Internet时间...
  10. Netfilter框架
  11. 水晶报表中图片不显示解决方案
  12. python 装饰器(复杂一点的)
  13. Servlet技术详解
  14. C语言练习——打印九九乘法表
  15. 在 mysql数据库怎么知道的ip_用户名_密码_数据库_数据库ip怎么查
  16. 【UE4笔记】Collision碰撞
  17. Android原生支持组件编译,从0开始编译android类原生系统
  18. 创业十年的感悟,创业者首先要让自己活下去
  19. iOS 【微信登录流程以及遇到的一些坑】
  20. 概率统计基础(一): 随机变量与随机事件

热门文章

  1. python零基础能学吗-python 零基础该怎么学?
  2. micropython和python区别-MicroPython入坑记(三)板子上的Python到底有多快?
  3. python要学多久可以找到工作-自学Python的高效方法,学Python多久能找到工作?
  4. 联想乐云记事2.0高调发布 新增智能语音识别 [多平台]
  5. 自从微信更新后,广东人都玩疯了!以后语音可以识别英语、粤语啦!
  6. 语音识别软件哪个好?好用的语音识别软件盘点
  7. JavaScript-拷贝
  8. 上传本地代码到github
  9. 【链表】牛客网:链表删除
  10. 【linux笔记】常用命令(3):文件相关