【bzoj1132】[POI2008] Tro
水题,用来巩固一下叉积。
cross(u,v)=xuyv−xvyucross(u,v)=x_uy_v-x_vy_u,其除以2就是u⃗ \vec{u}到v⃗ \vec{v}形成的有向面积。如果保证v在u的下方,则计算其围成的无向面积就不用加绝对值,而且满足结合律。
先从左往右从下往上枚举点,然后再按以这个点为极点的极角从下往上枚举点,边枚举边算叉积就可以了。
时间复杂度O(n2logn)O(n^2\log n)。
采用了机智的方法避免了精度问题。
#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a,_=b;i<=_;i++)
#define per(i,a,b) for(int i=a,_=b;i>=_;i--)
#define maxn 3003inline int rd() {char c = getchar();while (!isdigit(c)) c = getchar() ; int x = c - '0';while (isdigit(c = getchar())) x = x * 10 + c - '0';return x;
}typedef long long ll;struct Point {int x , y;Point(int x = 0 , int y = 0):x(x) , y(y) { }friend Point operator-(Point a , Point b) { return Point(a.x - b.x , a.y - b.y) ; }
}t[maxn] , p[maxn];bool cmp1(const Point a , const Point b) {return a.x == b.x ? a.y < b.y : a.x < b.x;
}bool cmp2(const Point a , const Point b) {return (ll) a.y * b.x < (ll) a.x * b.y;
}int n;void input() {n = rd();rep (i , 1 , n) {int x = rd() , y = rd();p[i] = Point(x , y);}
}void solve() {ll ans = 0;std::sort(p + 1 , p + n + 1 , cmp1);rep (i , 1 , n - 2) {ll wx = 0 , wy = 0;int l = n - i;rep (j , i + 1 , n) t[j - i] = p[j] - p[i];std::sort(t + 1 , t + l + 1 , cmp2);rep (j , 1 , l) wx += t[j].x , wy += t[j].y;rep (j , 1 , l) {wx -= t[j].x , wy -= t[j].y;ans += (ll) t[j].x * wy - (ll) t[j].y * wx;}}printf("%lld.%d\n" , ans / 2 , (ans & 1 ? 5 : 0));
}int main() {#ifndef ONLINE_JUDGEfreopen("data.txt" , "r" , stdin);#endifinput();solve();return 0;
}
【bzoj1132】[POI2008] Tro相关推荐
- 【BZOJ1132】[POI2008]Tro 几何
[BZOJ1132][POI2008]Tro Description 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 Input 第一行给出数字N,N在[3,3000 ...
- 【bzoj1132】[POI2008]Tro 计算几何
按照横坐标为第一关键字,纵坐标为第二关键字排序, 枚举每个点作为原点 把再它后面的点拿出来,求每一对点与原点构成的三角形的面积 abs(a[i].x*a[j].y-a[i].y*a[j].x) 如果能 ...
- 【BZOJ1132】【POI2008】Tro(计算几何)
Description 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 Solution 将点按yyy排序,枚举一个点,将在它后面的点以它为原点极角排序,用前缀和计算 ...
- 【BZOJ1132】【POI2008】Tro 计算几何 叉积求面积
链接: #include <stdio.h> int main() {puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢");puts("网址: ...
- 【BZOJ1123】[POI2008]BLO【割顶】
[题目链接] 题意可见discuss. 用Tarjan求割顶,然后对割顶的所有子树求点对个数(前缀和扫一遍),最后把自身和其他点的答案加上. 没注意边,数组开小了. /* Pigonometry */ ...
- 【BZOJ1116】[POI2008]CLO【BFS】
[题目链接] 同[这个题] /* Pigonometry */ #include <cstdio> #include <algorithm>using namespace st ...
- 【BZOJ1123】 [POI2008]BLO (tarjan)
tarjan判断割点...拿掉一个点之后,会被分成若干个联通块,用节点个数和统计一下他们相互不能到达的个数就好. 1 const maxn=100419; 2 maxm=1000419; 3 type ...
- 【bzoj1123】[POI2008]BLO
*题目描述: Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通. *输入 输入n<=1000 ...
- 【bzoj1116】 [POI2008]CLO
Description Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 你要把其中一些road变成单向边使得:每个t ...
最新文章
- 最新最全的 Android 开源项目合集(一)
- 大型网站架构演化历程
- EasyUI中分页的简单使用
- HTML表格,table,thead,tbody,tfoot,th,tr,td,的属性以及跨行,跨列
- 如何在Kubernetes里给PostgreSQL创建secret
- Objective-C 一些很基础的总结
- android应用开发(24)---理解任务和返回堆栈
- AudioParam
- redis映射的概念_Redis存储总是心里没底?你大概漏了这些数据结构原理
- ubantu中让g++支持c++11的办法
- 符号回归工具之 geppy: Python中的基因表达编程框架
- 计算机无法识别建行网银盾,建行网银盾无法识别怎么办 几招办法教你轻松解决...
- amd raid linux驱动,AMD 磁盘阵列控制器 驱动程序下载——更新 AMD 软件
- makefile suppress echoing the actual command @
- alwayson的同步提交和异步提交
- 2021年上海会展行业发展现状及重点企业对比分析:展览面积为1086万平方米,同比减少1.97%[图]
- 从零开始学习badusb 7月21日
- Dirty Pipe – Linux 内核本地提权漏洞
- 【苹果家庭iMessage推送】Aupperpushslcertificate或ProductPushsCertificate证书不可以过期
- 分享一个免费并开源的SSH连接工具