bzoj 1132: [POI2008]Tro
1132: [POI2008]Tro
Time Limit: 20 Sec Memory Limit: 162 MB
Submit: 1663 Solved: 558
[Submit][Status][Discuss]
Description
平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000
Input
第一行给出数字N,N在[3,3000] 下面N行给出N个点的坐标,其值在[0,10000]
Output
保留一位小数,误差不超过0.1
Sample Input
Sample Output
考虑先暴力每一个点(X, Y)
对于当前点(X, Y),暴力其它所有点(x, y),将每个点先处理为(x', y') = (x-X, y-Y)
这样当前点对答案的贡献就为(还要除以2)
所有点按x从小到大排序,然后按顺序枚举(X, Y),以(X, Y)为源点后,剩下点再按幅角排序,那么上面公式的每一项就一定都为正,就可以去掉绝对值
化简公式有
对于yb'和xb'求前缀和,就可以O(n)算出贡献了
复杂度O(n*(nlogn+n))=O(n²logn)
注意上面公式算的是四边形面积,所以答案要除以2,还有要去重
#include<stdio.h>
#include<algorithm>
using namespace std;
#define LL long long
int X, Y;
typedef struct Point
{int x, y;bool operator < (const Point &b) const{if((x-X)*(b.y-Y)>(y-Y)*(b.x-X))return 1;return 0;}
}Point;
Point s[6005];
bool comp(Point a, Point b)
{if(a.x<b.x || a.x==b.x && a.y<b.y)return 1;return 0;
}
int main(void)
{LL ans;int n, i, j, sy, sx;scanf("%d", &n);for(i=1;i<=n;i++)scanf("%d%d", &s[i].x, &s[i].y);sort(s+1, s+n+1, comp);ans = 0;for(i=1;i<=n;i++){X = s[i].x, Y = s[i].y;for(j=i+1;j<=n;j++)s[n+j-i].x = s[j].x, s[n+j-i].y = s[j].y;sort(s+n+1, s+n+n-i+1);sx = sy = 0;for(j=n+1;j<=n+n-i;j++){ans += (LL)(s[j].y-Y)*sx-(LL)(s[j].x-X)*sy;sx += s[j].x-X;sy += s[j].y-Y;}}if(ans%2==0)printf("%lld.0\n", ans/2);elseprintf("%lld.5\n", ans/2);
}
bzoj 1132: [POI2008]Tro相关推荐
- BZOJ 1132 [POI2008]Tro(极角排序)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1132 [题目大意] 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和(N&l ...
- BZOJ.1132.[POI2008]Tro(极角排序)
BZOJ 洛谷 考虑暴力,每次枚举三个点,答案就是\(\frac12\sum_{k<j<i}(i-k)\times(j-k)\). 注意到叉积有分配率,所以固定\(k\),枚举\(i,j\ ...
- 1132: [POI2008]Tro 计算几何
首先O(N^3)是不科学的..我们起码要想办法优化到O(N^2logN). 考虑每次枚举一个点,以它作为一个顶点,然后维护一个前缀和来计算每个点与夹角在逆时针180°内的点(我表述的不好..边界可以二 ...
- 1132: [POI2008]Tro
Description 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 Input 第一行给出数字N,N在[3,3000] 下面N行给出N个点的坐标,其值在[0,10 ...
- bzoj1132 [POI2008]Tro(叉积)
bzoj1132 [POI2008]Tro 原题地址:http://www.lydsy.com/JudgeOnline/problem.php?id=1132 题意: 平面上有N个点. 求出所有以这N ...
- [POI2008]Tro
题面 <center>2042: [POI2008]Tro<center> <center>时间限制:20秒 内存限制:162MB<center> 题目 ...
- 【BZOJ1132】[POI2008]Tro 几何
[BZOJ1132][POI2008]Tro Description 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 Input 第一行给出数字N,N在[3,3000 ...
- BZOJ 1132 Tro
Tro [问题描述] 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 [输入格式] 第一行给出数字N,N在[3,3000] 下面N行给出N个点的坐标,其值在[0,10 ...
- BZOJ 1124: [POI2008]枪战Maf(构造 + 贪心)
题意 有 \(n\) 个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪. 因此,对于不同的开枪顺序,最后死的人也不同. 问最 ...
最新文章
- 交叉科学不仅不是边缘学科,反而应是科研主流
- python caffe报错:No module named google
- SpringCloud之Feign源码分析
- 深度洞见|起底元宇宙风潮,如何重塑未来数字营销?
- java rest 图_SpringMVC视图及REST风格
- ABAP R3 时代著名的 SFLIGHT 航班模型测试数据,到了S/4HANA时代的进化版
- 未来计算机打蜡机,电脑洗车机的未来发展方向:多样化or精简化?
- JBoss Fuse:使用JEXL的动态蓝图文件
- c++语言怎么从internet上某个时间服务器获取时间信息,在VC++中实现同步Internet时间...
- Netfilter框架
- 水晶报表中图片不显示解决方案
- python 装饰器(复杂一点的)
- Servlet技术详解
- C语言练习——打印九九乘法表
- 在 mysql数据库怎么知道的ip_用户名_密码_数据库_数据库ip怎么查
- 【UE4笔记】Collision碰撞
- Android原生支持组件编译,从0开始编译android类原生系统
- 创业十年的感悟,创业者首先要让自己活下去
- iOS 【微信登录流程以及遇到的一些坑】
- 概率统计基础(一): 随机变量与随机事件
热门文章
- python零基础能学吗-python 零基础该怎么学?
- micropython和python区别-MicroPython入坑记(三)板子上的Python到底有多快?
- python要学多久可以找到工作-自学Python的高效方法,学Python多久能找到工作?
- 联想乐云记事2.0高调发布 新增智能语音识别 [多平台]
- 自从微信更新后,广东人都玩疯了!以后语音可以识别英语、粤语啦!
- 语音识别软件哪个好?好用的语音识别软件盘点
- JavaScript-拷贝
- 上传本地代码到github
- 【链表】牛客网:链表删除
- 【linux笔记】常用命令(3):文件相关