1132: [POI2008]Tro

Time Limit: 20 Sec  Memory Limit: 162 MB
Submit: 1722  Solved: 575
[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

HINT

看见题一眼知道怎么做,然后排序挂了,调了好久
计算面积可以通过叉积前缀的形式来求和,但是叉积求出的是有向面积,所以必须处理abs的问题
怎么处理呢?让所有的叉积都>0是最好的处理方法,可以通过排序来实现

枚举点i,再枚举i之前的点与i构成i-1个向量,对这些向量排序使得标号大的向量叉积标号小的一定>0,并动态统计这些向量的前缀和即可

但是有可能出现问题:
如果一开始点是无序的,很混乱,那么可能会出现以这种情况
for example
4
-5 3
6 -3
4 -6
-2 2

辣么,在处理最后一个点的时候,会出现排序紊乱的情况
我想了一下,发现了原因:(-5,3)与(-2,2) (4,-6)与(2,2) 这两条线段构成的角,从(-4,6)逆时针转上去,形成了一个钝角。。
于是我们需要把每次枚举的i点设置为原点,使得处理它时,所有要被计算的点在同一象限
说起来很麻烦,实际就是按照横纵坐标排个序

其实这个题还挺水的。

 #include<bits/stdc++.h>
#define N 3005
#define ll long long
using namespace std;
int n,tp;ll ans;
struct point{
int x,y;
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};}
}a[N],q[N];
ll crs(point a,point b){return (ll)a.x*b.y-(ll)a.y*b.x;}
bool cmp1(point x,point y){return x.x==y.x?x.y<y.y:x.x<y.x;}
bool cmp2(point x,point y){return crs(x,y)<;}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d%d",&a[i].x,&a[i].y);
sort(a+,a++n,cmp1);
for(int i=;i<=n;i++){
point t;t.x=t.y=;tp=;
for(int j=;j<i;j++)
q[++tp]=a[j]-a[i];
sort(q+,q++tp,cmp2);
for(int j=;j<i;j++){
ans+=crs(q[j],t);
t=t+q[j];
}
}
if(ans&)printf("%lld.5\n",ans>>);
else printf("%lld.0\n",ans>>);
return ;
}

bzoj1132[POI2008]Tro 计算几何的更多相关文章

  1. BZOJ1132: [POI2008]Tro

    1132: [POI2008]Tro Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 815  Solved: 211[Submit][Status] ...

  2. 【bzoj1132】[POI2008]Tro 计算几何

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

  3. 【计算几何】【极角序】【前缀和】bzoj1132 [POI2008]Tro

    把点按纵坐标排序,依次枚举,把它作为原点,然后把之后的点极角排序,把叉积的公式稍微化简一下,处理个后缀和统计答案. #include<cstdio> #include<cmath&g ...

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

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

  5. BZOJ1132: [POI2008]Tro(叉积 排序)

    题意 世上最良心题目描述qwq 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 Sol 直接模拟是$n^3$的. 考虑先枚举一个$i$,那么我们要算的就是$\sum_ ...

  6. 【BZOJ1132】[POI2008]Tro 几何

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

  7. BZOJ_1132_[POI2008]Tro_计算几何

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

  8. bzoj 1132 [POI2008]Tro 几何

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

  9. 【BZOJ1132】【POI2008】Tro 计算几何 叉积求面积

    链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...

随机推荐

  1. 一个C&C++程序的生命历程

    翻了好多博客,内容星星点点,没找到我想要的,现在吸取大神精华,加上本人拙见,总结如下: 一个C或C++程序从你开始编写,到结束,整个过程,都做了些什么,请看下文: 先看大体的过程:看图: 我在这里主要 ...

  2. linux 下 nc 命令的使用

    netcat被誉为网络安全界的'瑞士军刀',一个简单而有用的工具,透过使用TCP或UDP协议的网络连接去读写数据.它被设计成一个稳定的后门工具,能够直接由其它程序和脚本轻松驱动.同时,它也是一个功能强 ...

  3. Something about SeekingJob---TelInterview(电话面试)

    昨天和今天分别收到两次电话面试,有一点小小感悟,遂注之. 作为一枚还未毕业的大三狗来说,我在想,找个实习真的是西天取金,必定要先经历九九八十一难吗(伤心)?所以在这里整理了电话面试遇到的问题: 集合框 ...

  4. JAVA_SE基础——70.Math类

    package cn.itcast.other; /*  Math 数学类, 主要是提供了很多的数学公式.    abs(double a)  获取绝对值  ceil(double a)  向上取整 ...

  5. Ubuntu命令行连接WPA/WPA2无线网线

    一,连接无加密无线网络zhang:sudo ip link set wlan0 up sudo iw dev wlan0 connect zhangsudo dhclient wlan0 二,连接WP ...

  6. MySQL默认储存引擎修改

    1.输入以下SQL语句查看当前储存引擎支持: SHOW ENGINES; 如图所示本机默认引擎为MyISAM: 2.若要修改引擎执行: ALTER TABLE 表名 ENGINE = 储存引擎名: 3 ...

  7. Excel+DDT数据驱动实例

    一.首先安装dtt模块 数据驱动原理 1.测试数据为多个字典的list类型 2.测试类前加修饰@ddt.ddt 3.case前加修饰@ddt.data() 4.运行后用例会自动加载成N个单独的用例 二 ...

  8. hibernate_exercise-many- to-one(1)

    多对一关系 1.创建t_user表.t_group表 2.在eclipse中创建对应的实体类 package com.eneity; public class User { private int i ...

  9. DevExpress控件的GridControl实现行多选

    最近用到DevExpress控件的GridControl控件,需要用到行多选的操作,在网上找的资料,自己总结一下. 先展示一下效果:

  10. jsp和servlet的区别和联系

    jsp和servlet的区别和联系:1.jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能 ...