BZOJ 1132 Tro
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的更多相关文章
- [POI 2008][BZOJ 1132]Tro
这题我真是无能为力了 这题的做法还是挺简单的 枚举左下角的点做为原点,把其余点按极角排序 PS.是作为原点,如枚举到 k 时,对于所有 p[i] (包括p[k]) p[i]-=p[k] (此处为 ...
- BZOJ.1132.[POI2008]Tro(极角排序)
BZOJ 洛谷 考虑暴力,每次枚举三个点,答案就是\(\frac12\sum_{k<j<i}(i-k)\times(j-k)\). 注意到叉积有分配率,所以固定\(k\),枚举\(i,j\ ...
- bzoj 1132 [POI2008]Tro 几何
[POI2008]Tro Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 1796 Solved: 604[Submit][Status][Discu ...
- BZOJ 1132 [POI2008]Tro(极角排序)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1132 [题目大意] 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和(N&l ...
- bzoj 1132 POI2008 Tro
大水题=_=,可我想复杂了…… 很裸的暴力,就是加了个小优化…… 叉积求面积 :abs(xi*yj - yi*xj) 所以去掉绝对值,把 xi 和 xj 提出来就可以求和了 去绝对值加个极角排序,每次 ...
- 【刷题】BZOJ 1132 [POI2008]Tro
Description 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 Input 第一行给出数字N,N在[3,3000] 下面N行给出N个点的坐标,其值在[0,10 ...
- bzoj 1132: [POI2008]Tro 计算几何
题目大意: 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 题解 我们看到了n的范围,于是我们就知道这一定不是一个线性算法 所以我们尝试枚举三角形的一个点,那么我们现 ...
- bzoj 1132 几何
思路:我刚开始算三角形的方法是原点叉积三条边,然后计算每条边向量积的贡献,但是对于同一条线上的点 有时候没有办法抵消掉..... 看网上的思路是对于一个三角形的面积通过两条边的叉积获得,然后枚举一个点 ...
- 【BZOJ】1132: [POI2008]Tro
题意 给\(n(1 \le n \le 3000)\)个点,求所有三角形的面积和. 分析 首先枚举一个点,发现把其它点按照关于这个点的极角排序后第\(i\)个点关于前面\(1\)到\(i-1\)的点组 ...
随机推荐
- 对于新能源Can数据、电池BMS等字节和比特位的解析
1.对于1个字节(8个bit)以上的数据需要先进行倒序(因为高位在前 低位在后). CanID CanData 排序后的 字节数据 十进制 分辨率(0.005) 偏移量(40) 0x18FEC117 ...
- django-redis缓存记录
对于站点缓存,我们使用redis这款key-value数据库.Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径.Redis的数据类型都是基于基本数据结构的 ...
- python 进度条 打印
- MultipartFile 动态决定是否上传文件,解决不上传文件报错
controller 接收参数 用 HttpServletRequest 代替 @RequestParam() 接收参数 picFile 前台 传文件的参数名字 , 这样 前段 传 nul ...
- Shell脚本使用汇总整理——mysql数据库5.7.8以后备份脚本
Shell脚本使用汇总整理——mysql数据库5.7.8以后备份脚本 Shell脚本使用的基本知识点汇总详情见连接: https://www.cnblogs.com/lsy-blogs/p/92234 ...
- gitLab 服务器搭建 (自己服务器上搭建gitLab)
环境 lunix(ubuntu) 1:添加文件 在 /etc/apt/sources.list.d/gitlab-ce.list 中添加一行 deb https://mirrors.tuna.ts ...
- centos7.4安装rabbitmq服务(3.7.10版本)
一.需要安装erlang版本依赖,可以使用二进制安装方式,也可以通过rpm安装,但是安装的时候会提示需要erlang版本>=19.3,而且直接默认yum仓库中的版本较低.,为了节省时间,文章中直 ...
- 【java】A local class access to local variables
内部类参考 A local class has access to local variables. However, a local class can only access local vari ...
- 10.VUE学习之使用lodash库减少watch对后台请求的压力
问题描述 使用watch监听库里word的值的变化,获取新值后,用oxios发送的ajax异步请求, 此时会多次发送请求,浪费服务器资料. 解决办法 使用lodash库里的_.debounce函数延缓 ...
- Python入门第一课——Python的起源、发展与前景!
我们在做任何一件事情之前,我们都会通过各种渠道去搜集事情的信息,了解事情的来龙去脉,学习一门编程语言也是如此,只有知根知底,我们才能有明确的方向和目标,以及底气去完成这件事情,今天我带大家来看看Pyt ...