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;
}
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
大水题=_=,可我想复杂了…… 很裸的暴力,就是加了个小优化…… 叉积求面积 :abs(xi*yj - yi*xj) 所以去掉绝对值,把 xi 和 xj 提出来就可以求和了 去绝对值加个极角排序,每次 ...
- bzoj 1132 [POI2008]Tro 几何
[POI2008]Tro Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 1796 Solved: 604[Submit][Status][Discu ...
- bzoj 1132: [POI2008]Tro 计算几何
题目大意: 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 题解 我们看到了n的范围,于是我们就知道这一定不是一个线性算法 所以我们尝试枚举三角形的一个点,那么我们现 ...
- 【刷题】BZOJ 1132 [POI2008]Tro
Description 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 Input 第一行给出数字N,N在[3,3000] 下面N行给出N个点的坐标,其值在[0,10 ...
- 【BZOJ】1132: [POI2008]Tro
题意 给\(n(1 \le n \le 3000)\)个点,求所有三角形的面积和. 分析 首先枚举一个点,发现把其它点按照关于这个点的极角排序后第\(i\)个点关于前面\(1\)到\(i-1\)的点组 ...
- BZOJ1132: [POI2008]Tro(叉积 排序)
题意 世上最良心题目描述qwq 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 Sol 直接模拟是$n^3$的. 考虑先枚举一个$i$,那么我们要算的就是$\sum_ ...
- BZOJ1132: [POI2008]Tro
1132: [POI2008]Tro Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 815 Solved: 211[Submit][Status] ...
- bzoj1132[POI2008]Tro 计算几何
1132: [POI2008]Tro Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 1722 Solved: 575[Submit][Status] ...
随机推荐
- 20151024_001_C#基础知识(静态与非静态的区别,值类型和引用类型,堆和栈的区别,字符串的不可变性,命名空间)
1:我们把这些具有相同属性和相同方法的对象进行进一步的封装,抽象出来类这个概念. 类就是个模子,确定了对象应该具有的属性和方法. 对象是根据类创建出来的. 2:类:语法 [public] class ...
- node.js 开发命令行工具 发布npm包
新建一个文件夹“nodecmd”: 在nodecmd下新建文件夹bin: 在bin文件夹下新建JavaScript文件hello.js #!/usr/bin/env node console.log( ...
- ...args剩余参数用法
剩余参数语法允许我们将一个不定数量的参数表示为一个数组. function sum(...theArgs) { return theArgs.reduce((previous, current) ...
- spring-retry 重试机制
业务场景 应用中需要实现一个功能: 需要将数据上传到远程存储服务,同时在返回处理成功情况下做其他操作.这个功能不复杂,分为两个步骤:第一步调用远程的Rest服务逻辑包装给处理方法返回处理结果:第二步拿 ...
- 利用最新Apache解析漏洞(CVE-2017-15715)绕过上传黑名单
转载自:https://www.leavesongs.com/PENETRATION/apache-cve-2017-15715-vulnerability.html 目标环境: 比如,目标存在一个上 ...
- 微信小程序的下拉刷新
微信小程序的下拉刷新:在page的js文件中有监听用户下拉刷新的处理函数onPullDownRefresh:function(){} //js文件中自带的处理函数,在onUnload下面,注意不要重复 ...
- IE8下面的line-height的bug
当line-height小于正常值时,超出的部分将被剪裁掉
- MySQL索引基础知识点
什么是索引 索引类似于书本目录,是数据库存储引擎维护的用于快速查找到记录的一种数据结构,它是对查询性能优化的最有效手段. MySQL索引是在存储引擎层而不是服务器层实现的,不同存储引擎的索引工作方式也 ...
- maven repository 配置
eclipse maven 配置修改: maven repository 配置 http://blog.csdn.net/joewolf/article/details/4876604 Maven缺省 ...
- selenium 参数传递(testng.xml 、DataProvider )
为了方便测试代码的复用性,常常采用参数化.传递参数给测试代码 有一下两种方法:1.通过配置XML文件实现.2.通过DataProvider 传递参数. 注意:DataProvider 传递参数返回的是 ...