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] 思路:按从左到右的预处理点排序 每次枚举最左点作为原点,把叉积从大到小排 ...
随机推荐
- ActiveMQ 安全认证
修改配置文件 位置: apache-activemq-5.9.0/conf/ vi activemq.xml 在<broker xmlns="http://activemq.apach ...
- mpvue——实现点击数组内的某一元素进行置顶(排序第一)操作
前言 其实很简单只是用了js的几个函数 substr unshift splice 完整代码 | mpvue模仿QQ 代码 思路很简单,获取当前元素下标然后通过unshift函数将该值插入到数组第一位 ...
- LoadRunner性能测试样例分析
LR性能测试结果样例分析 测试结果分析 LoadRunner性能测试结果分析是个复杂的过程,通常可以从结果摘要.并发数.平均事务响应时间.每秒点击数.业务成功率.系统资源.网页细分图.Web服务器资源 ...
- dict built-in function
映射类型:字典 字典是无序的,映射类型对象里哈希值和被指向的对象是一对多的关系,字典中的键必须是可哈希的,所有不可变的类型都是可哈希的,另外针对数字键来说,值相等的两个数字是相同的键,例如1和1.0: ...
- poj 1258 Agri-Net 解题报告
题目链接:http://poj.org/problem?id=1258 题目意思:给出 n 个 farm,每个farm 之间通过一定数量的fiber 相连,问使得所有farm 直接或间接连通的 最少 ...
- laravel打印原生语句
laravel中快捷方便的打印语句的方法步骤一:DB::connection()->enableQueryLog();$data["banner"] = WebsiteBan ...
- [Selenium] 使用Chrome Driver 的示例
//导入Selenium 库和 ChromeDriver 库 pachage com.learningselenium.simplewebdriver; import java.util.concur ...
- Power Crisis
传送门 这道题被严重恶意评分了,实际应该是绿题. 因为其实我们只需要模拟即可.这里我们引入一种新的东西:约瑟夫环. 它能直接告诉你约瑟夫问题中最后一个存活下来的人是谁.(不过下标是从0开始的,实际使用 ...
- k8s-部署dashboard1.10.1-十七
一.获取镜像和填坑 我的k8s是1.13.1,这里dashboard用的1.10.1: 由于国内不能访问Google,而且大部分人可能也没有其他途径访问:只能在阿里云或者其他镜像网站上获取了: 镜像获 ...
- mysql5.7 异常ERROR 1055 (42000)
大致错误如:ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonagg ...