Tro

【问题描述】

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

【输入格式】

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

【输出格式】

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

【样例输入】

5
0 0
1 2
0 2
1 0
1 1

【样例输出】

7.0


题解:

叉积之和

我们以每个点为原点,维护前缀和

为了保证夹角不超过π,先按水平序排序

为了保证面积都是正值,按极角序排序

 #include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
struct point
{
long long x, y;
friend inline long long operator * (point a, point b)
{
return a.x * b.y - a.y * b.x;
}
friend inline point operator - (point a, point b)
{
return (point) {a.x - b.x, a.y - b.y};
}
inline void empty()
{
x = y = ;
}
};
point operator + (point a, point b)
{
point c;
c.x = a.x + b.x;
c.y = b.y + b.y;
return c;
}
const int maxn = ;
int n;
point p[maxn];
inline bool lev(point a, point b)
{
if(a.y != b.y) return a.y < b.y;
return a.x < b.x;
} int num;
point np[maxn];
inline bool ang(point a, point b)
{
return a * b > ;
}
point sum;
long long ans;
int main()
{
scanf("%d", &n);
for(int i = ; i <= n; ++i) scanf("%lld %lld", &p[i].x, &p[i].y);
sort(p + , p + + n, lev);
for(int k = ; k <= n; ++k)
{
num = ;
for(int i = k + ; i <= n; ++i) np[++num] = p[i] - p[k];
sort(np + , np + + num, ang);
sum.empty();
for(int i = ; i <= num; ++i)
{
ans += sum * np[i];
sum.x += np[i].x;
sum.y += np[i].y;
}
}
printf("%lld.%d", ans >> , (ans & ) ? : );
}

BZOJ 1132 Tro的更多相关文章

  1. [POI 2008][BZOJ 1132]Tro

    这题我真是无能为力了 这题的做法还是挺简单的 枚举左下角的点做为原点,把其余点按极角排序    PS.是作为原点,如枚举到 k 时,对于所有 p[i] (包括p[k]) p[i]-=p[k] (此处为 ...

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

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

  3. bzoj 1132 [POI2008]Tro 几何

    [POI2008]Tro Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 1796  Solved: 604[Submit][Status][Discu ...

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

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

  5. bzoj 1132 POI2008 Tro

    大水题=_=,可我想复杂了…… 很裸的暴力,就是加了个小优化…… 叉积求面积 :abs(xi*yj - yi*xj) 所以去掉绝对值,把 xi 和 xj 提出来就可以求和了 去绝对值加个极角排序,每次 ...

  6. 【刷题】BZOJ 1132 [POI2008]Tro

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

  7. bzoj 1132: [POI2008]Tro 计算几何

    题目大意: 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 题解 我们看到了n的范围,于是我们就知道这一定不是一个线性算法 所以我们尝试枚举三角形的一个点,那么我们现 ...

  8. bzoj 1132 几何

    思路:我刚开始算三角形的方法是原点叉积三条边,然后计算每条边向量积的贡献,但是对于同一条线上的点 有时候没有办法抵消掉..... 看网上的思路是对于一个三角形的面积通过两条边的叉积获得,然后枚举一个点 ...

  9. 【BZOJ】1132: [POI2008]Tro

    题意 给\(n(1 \le n \le 3000)\)个点,求所有三角形的面积和. 分析 首先枚举一个点,发现把其它点按照关于这个点的极角排序后第\(i\)个点关于前面\(1\)到\(i-1\)的点组 ...

随机推荐

  1. 1072: [SCOI2007]排列perm

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3000  Solved: 1875[Submit][Status][Discuss] Descript ...

  2. 绘制字符串:imagestring()

    <?php //1. 绘制图像资源(创建一个画布) $image = imagecreatetruecolor(500, 300); //2. 先分配一个绿色 $green = imagecol ...

  3. java util - Hex转换工具

    测试代码 package cn.java.codec.hex; public class Test { public static void main(String[] args) { String ...

  4. GoF23种设计模式之创建型模式之抽象工厂模式

    一.概述 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 二.适用性 1.一个系统要独立于它的产品的创建.组合和表示的时候. 2.一个系统要由多个产品系列中的一个来配置的时候. ...

  5. 虚拟机中配置SQL SERVER2008R2远程访问

    VM虚拟机中配置数据库访问 选择虚拟机设置--硬件--网络适配器,选择桥接模式:直接连接物理网络 不可选用主机模式(与主机共享专用网络) 数据库远程配置,转自:http://jingyan.baidu ...

  6. HUD:2896-病毒侵袭

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2896 病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memor ...

  7. Selenium与PhantomJS【转】

    爬虫(Spider),反爬虫(Anti-Spider),反反爬虫(Anti-Anti-Spider) 之间恢宏壮阔的斗争... Day 1 小莫想要某站上所有的电影,写了标准的爬虫(基于HttpCli ...

  8. 使用Vue CLI3开发多页面应用

    一.安装vue-cli3 1.如果你已经全局安装了旧版本的 vue-cli(1.x 或 2.x),你需要先通过 npm uninstall vue-cli -g 或 yarn global remov ...

  9. C#环境下使用Windows消息传递字符串数据的研究

    前言: 日前,师兄交给了我一个课题,将一个后台运行的Console程序,修改为WindowsForm程序,并在其界面上增加配置设置,以及运行记录。 原来的Console程序,后台运行的流程在其中一个类 ...

  10. Git之2分钟教程

    Git之2分钟入门 普通人:“借我1000块钱”.程序猿:“借你1024吧,凑个整”. 今天是1024,是我们程序员的节日,在此,首先祝各位程序猿以及程序媛们节日快乐~然后送出一份节日礼物,没错,就是 ...