题面

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

题目描述
  平面上有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

思路

题解
  计算几何题,首先已知三角形三点求面积公式:|(y$_j$−y$_i$)∗(x$_k$−x$_i$)−(y~k~−y~i~)∗(x~j~−x~i~)|/2;
  暴力做法是,枚举所有三角形,求面积即可。公式:2*ans=$\sum_{i<j<k}^n$|(y~j~−y~i~)∗(x~k~−x~i~)−(y~k~−y~i~)∗(x~j~−x~i~)|;时间复杂度:O(n^3^),本来以为会T就没有试,ac后试了试竟然过了?!后附弱智代码
  优化→O(n^2^logn)。先将所有点按从左下至右上的顺序排序,再以斜率排序即可去除上述绝对值,枚举第i点时,在以该点为原点建立新坐标系,就可以将公式转化为:2*ans=$\sum_{j=i+1}^n$(y~j~*$\sum_{k=j+1}^n$x~k~-$\sum_{k=j+1}^n$y~k~*x~j~),维护两个后缀和即可。
  还有就是精度问题,直接用double会wa,应用ll,除以2后再保留一位小数。

源码

//正确做法
#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
typedef struct{//定义坐标点结构类型ll x,y;
}Point;
const int N=3005;
Point p[N],t[N];
ll sx[N],sy[N];
bool cmp1(Point a,Point b){//定义比较方式1----先按x从左到右排,x相等时按照y从下到上排return a.x == b.x ? a.y < b.y : a.x < b.x;
}
bool cmp2(Point a,Point b){//定义比较方式2----按照与定点连线的斜率从大到小排return b.y*a.x>b.x*a.y;
}
Point funj(Point a,Point b){//定义点与点之间的减法,返回一个点Point p;p=Point{a.x-b.x,a.y-b.y};return p;
}
int main(){int n,i,j;ll ans=0;scanf("%d",&n);for(i=1;i<=n;i++) scanf("%lld%lld",&p[i].x,&p[i].y);sort(p+1,p+n+1,cmp1);//首先按照从左下到右上的顺序排序for(i=1;i<=n;i++){for(j=i+1;j<=n;j++) t[j]=funj(p[j],p[i]);//求以点i为原点的新坐标下其右上点的新坐标sort(t+i+1,t+n+1,cmp2);//将上述点按照斜率从大到小排序for(j=n;j>i;j--){//计算后缀和sx[j]=sx[j+1]+t[j].x,sy[j]=sy[j+1]+t[j].y;ans+=t[j].x*sy[j+1]-t[j].y*sx[j+1];}}printf("%lld.%lld\n",ans/2,ans%2*5);return 0;
}
//暴力做法,竟然没T……?!?!%%%O(n3)
#include <iostream>
using namespace std;
typedef long long ll;
const int N=3e3+5;
typedef struct {int x,y;
}Point;
Point p[N];
int main() {//ios::sync_with_stdio(0);//cin.tie(0);cout.tie(0);int i,n,j,k;ll ans=0;//cin>>n;scanf("%d",&n);for(i=0;i<n;i++){//cin>>p[i].x>>p[i].y;scanf("%d%d",&p[i].x,&p[i].y);}for(i=0;i<n;i++){for(j=i+1;j<n;j++){for(k=j+1;k<n;k++){ans+=abs((p[j].y-p[i].y)*(p[k].x-p[i].x)-(p[k].y-p[i].y)*(p[j].x-p[i].x));}}}printf("%lld.%lld\n",ans/2,ans%2*5);return 0;
}

[POI2008]Tro相关推荐

  1. bzoj 1132: [POI2008]Tro

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

  2. bzoj1132 [POI2008]Tro(叉积)

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

  3. 【BZOJ1132】[POI2008]Tro 几何

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

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

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

  5. bzoj1132:[POI2008]Tro

    [传送门])(https://www.lydsy.com/JudgeOnline/problem.php?id=1132) 自己的计算几何还是挺渣的呢. 其实只要考虑一下叉积的式子就可以想到前缀和了, ...

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

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

  7. BZOJ1132: [POI2008]Tro

    所以为啥用long long本地能过所有数据交上去就WA,一定要改int啊 一开始写了个用点到直线距离公式的,维护两个指针扫过去 emmmmmm并不能过样例,因为有根号什么的东西,调不动-. 膜题解发 ...

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

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

  9. [BZOJ1132][POI2008]Tro(计算几何)

    题目描述 传送门 题目大意:平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和. 题解 枚举每一个点,以它为原点建立平面直角坐标系,然后其他的点按照极角排序. 向量的叉积满足分配律,所以可以t ...

最新文章

  1. Python(27)_字符串的常用的方法2
  2. 强化学习笔记 DDPG (Deep Deterministic Policy Gradient)
  3. 织梦熊掌号插件兼容php5.3,DedeCMS百度熊掌号推送插件下载
  4. uniapp可以封装组件嘛_uniapp聊天App实例|vue+uniapp仿微信界面|红包|朋友圈
  5. javascript 将table导出 Excel ,可跨行跨列
  6. jsp网页实现任意进制的数转换成任意进制数
  7. oracle application r11i,有人在linux 2.1AS下安装过R11i吗?请帮忙解决如下问题
  8. ABAP Util代码
  9. 主成分分析二级指标权重_确定权重方法之一:主成分分析
  10. 固态硬盘SSD之Flash闪存的基本概念
  11. java判断闰年的方法_Java判断闰年的2种方法示例|chu
  12. 利用云片网提供的API发送短信
  13. html 圣杯布局 高度,web圣杯布局
  14. 2021年深圳市产业发展与创新人才奖申报条件及材料
  15. 如何选择第三方鉴定机构?
  16. 《Python编程:从入门到实践》 练习 9-4 9-5
  17. 数据库——彻底明白超键、候选键、主键、外键
  18. 1 交换机的基本配置与管理
  19. DE、SaDE、JADE、SHADE、L-SHADE算法整理
  20. office2013中word设置标题自动编号

热门文章

  1. 裸奔系列之博科SAN交换机(1)---SAN交换机产品介绍
  2. 个人觉得比较好的网站、博客、文章
  3. sql学习-with as的使用-分析数据得到结果
  4. Linux打假,“开源中国”在哪里?
  5. 学生课间10分钟鸦雀无声遭反对,教育部做出最新响应
  6. batik1.8在文字渲染上的bug
  7. UGC发垃圾机制和内容审核
  8. C语言基础——“hello word”篇
  9. 可怕的无声环境计算机怎么做,求高手解决电脑为什么无声
  10. 男性简单实用6个健身动作