BZOJ1132: [POI2008]Tro(叉积 排序)
题意
世上最良心题目描述qwq
平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000
Sol
直接模拟是$n^3$的。
考虑先枚举一个$i$,那么我们要算的就是$\sum_{j = 1}^n \sum_{k = j + 1}^n |Cross((a_j, b_j), (a_k, b_k))|$
但是在计算相对坐标以及叉积的时候的时候会出现绝对值
前者我们在最开始按照$x$坐标排序,后者在枚举$i$时重新按照斜率从小到大排序
上面的式子可以化为
$$\sum_{j = 1}^n a_j \sum_{k = j + 1}^n b_k - b_j \sum_{k = j + 1}^n a_k$$
直接对$a,b$做后缀和即可
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int MAXN = ;
int N;
struct Point {
int a, b;
Point operator - (const Point &rhs) const {
return (Point) {a - rhs.a, b - rhs.b};
}
bool operator < (const Point &rhs) const {
return a * rhs.b > rhs.a * b;
}
}p[MAXN], tmp[MAXN];
bool comp(const Point &aa, const Point &bb) {
return aa.a == bb.a ? aa.b < bb.b : aa.a < bb.a;
}
int main() {
N; scanf("%d", &N);
for(int i = ; i <= N; i++)
scanf("%lf %lf", &p[i].a, &p[i].b);
sort(p + , p + N + , comp);
memcpy(tmp, p , sizeof(p));
long double ans = ;
for(int i = ; i <= N; i++) {
for(int j = i + ; j <= N; j++) p[j] = p[j] - p[i];
sort(p + i + , p + N + );
double suma = , sumb = ;
for(int j = N; j > i; j--)
suma = suma + p[j + ].a, sumb = sumb + p[j + ].b,
ans = ans + p[j].a * sumb - p[j].b * suma;
memcpy(p, tmp, sizeof(tmp));
}
printf("%.1Lf", ans / );
return ;
}
BZOJ1132: [POI2008]Tro(叉积 排序)的更多相关文章
- 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] ...
- BZOJ.1132.[POI2008]Tro(极角排序)
BZOJ 洛谷 考虑暴力,每次枚举三个点,答案就是\(\frac12\sum_{k<j<i}(i-k)\times(j-k)\). 注意到叉积有分配率,所以固定\(k\),枚举\(i,j\ ...
- 【计算几何】【极角序】【前缀和】bzoj1132 [POI2008]Tro
把点按纵坐标排序,依次枚举,把它作为原点,然后把之后的点极角排序,把叉积的公式稍微化简一下,处理个后缀和统计答案. #include<cstdio> #include<cmath&g ...
- 【BZOJ1132】[POI2008]Tro 几何
[BZOJ1132][POI2008]Tro Description 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 Input 第一行给出数字N,N在[3,3000 ...
- bzoj 1132 [POI2008]Tro 几何
[POI2008]Tro Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 1796 Solved: 604[Submit][Status][Discu ...
- L3-021 神坛 (叉积排序+向量积求面积)
题目链接 https://pintia.cn/problem-sets/994805046380707840/problems/994805046577840128 题意:给定n个点求三角形最小面积: ...
- BZOJ 1132 [POI2008]Tro(极角排序)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1132 [题目大意] 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和(N&l ...
- 【BZOJ1132】Tro(叉积)
题意:平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 N个点的坐标,其值在[0,10000] 思路:按从左到右的预处理点排序 每次枚举最左点作为原点,把叉积从大到小排 ...
随机推荐
- Java异步套接字实例
服务端 package com.test.server; import java.io.IOException; import java.net.InetSocketAddress; import j ...
- IE9不能直接引用Console
问题: 公司有个项目,功能很简单,读取业务数据,展示在页面上. 一个很简单的问题,却因为目标浏览器是IE9,卡了三天. 前端给的反馈是: 在IE9下,程序一会儿对,一会儿不对--第一次刷不出来,多刷几 ...
- HDU3652 B-number —— 数位DP
题目链接:https://vjudge.net/problem/HDU-3652 B-number Time Limit: 2000/1000 MS (Java/Others) Memory L ...
- 基于Vuejs的搜索匹配功能
最近一直在看vue,查了很多资料,看了很多文档和博客,大概半知半解了,然后利用所理解的知识写了一个简单的搜索匹配功能. 大概长这个样子: <!DOCTYPE html> <htm ...
- android按压背景
android:background="?android:actionBarItemBackground"
- 字符串转Unicode码
var str = '中'; var charCode = str.charCodeAt(0); console.log(charCode); // => 20013; str.charCode ...
- jQuery中排除指定元素,同时选择剩下的所有元素
场景:某页面用了js延时加载技术处理所有图片,以改善用户体验,但是有几个图片不想延时加载,要求把它们单独挑出来. 研究了一下jQuery的API文档,搞掂了,jQuery真的很方便,贴在这里备份: 1 ...
- 【转】maven的安装、配置以及下载jar包
原文地址:https://blog.csdn.net/qq_40673345/article/details/79015456 1.下载maven的压缩包,并解压到除了C盘里的maven文件夹中 2. ...
- git切换分支保存修改的代码的方法(转载)
转自:http://www.tonitech.com/2344.html 最近在一个原有的项目上做一次非常大的改版,底层的数据库做了很大的变化,跟现在的版本无法兼容.现在的工作除了开发最新的版本之外还 ...
- 分析自己遇到的Excel导出报NullpointException问题
此文已由作者叶富宏授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 昨天一个商务反馈说报价信息导出失败,查看了一下日志发现是导出记录到Excel的时候报了NullpointEx ...