水题,用来巩固一下叉积。
  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相关推荐

  1. 【BZOJ1132】[POI2008]Tro 几何

    [BZOJ1132][POI2008]Tro Description 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 Input 第一行给出数字N,N在[3,3000 ...

  2. 【bzoj1132】[POI2008]Tro 计算几何

    按照横坐标为第一关键字,纵坐标为第二关键字排序, 枚举每个点作为原点 把再它后面的点拿出来,求每一对点与原点构成的三角形的面积 abs(a[i].x*a[j].y-a[i].y*a[j].x) 如果能 ...

  3. 【BZOJ1132】【POI2008】Tro(计算几何)

    Description 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 Solution 将点按yyy排序,枚举一个点,将在它后面的点以它为原点极角排序,用前缀和计算 ...

  4. 【BZOJ1132】【POI2008】Tro 计算几何 叉积求面积

    链接: #include <stdio.h> int main() {puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢");puts("网址: ...

  5. 【BZOJ1123】[POI2008]BLO【割顶】

    [题目链接] 题意可见discuss. 用Tarjan求割顶,然后对割顶的所有子树求点对个数(前缀和扫一遍),最后把自身和其他点的答案加上. 没注意边,数组开小了. /* Pigonometry */ ...

  6. 【BZOJ1116】[POI2008]CLO【BFS】

    [题目链接] 同[这个题] /* Pigonometry */ #include <cstdio> #include <algorithm>using namespace st ...

  7. 【BZOJ1123】 [POI2008]BLO (tarjan)

    tarjan判断割点...拿掉一个点之后,会被分成若干个联通块,用节点个数和统计一下他们相互不能到达的个数就好. 1 const maxn=100419; 2 maxm=1000419; 3 type ...

  8. 【bzoj1123】[POI2008]BLO

    *题目描述: Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通. *输入 输入n<=1000 ...

  9. 【bzoj1116】 [POI2008]CLO

    Description Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 你要把其中一些road变成单向边使得:每个t ...

最新文章

  1. 最新最全的 Android 开源项目合集(一)
  2. 大型网站架构演化历程
  3. EasyUI中分页的简单使用
  4. HTML表格,table,thead,tbody,tfoot,th,tr,td,的属性以及跨行,跨列
  5. 如何在Kubernetes里给PostgreSQL创建secret
  6. Objective-C 一些很基础的总结
  7. android应用开发(24)---理解任务和返回堆栈
  8. AudioParam
  9. redis映射的概念_Redis存储总是心里没底?你大概漏了这些数据结构原理
  10. ubantu中让g++支持c++11的办法
  11. 符号回归工具之 geppy: Python中的基因表达编程框架
  12. 计算机无法识别建行网银盾,建行网银盾无法识别怎么办 几招办法教你轻松解决...
  13. amd raid linux驱动,AMD 磁盘阵列控制器 驱动程序下载——更新 AMD 软件
  14. makefile suppress echoing the actual command @
  15. alwayson的同步提交和异步提交
  16. 2021年上海会展行业发展现状及重点企业对比分析:展览面积为1086万平方米,同比减少1.97%[图]
  17. 从零开始学习badusb 7月21日
  18. Dirty Pipe – Linux 内核本地提权漏洞
  19. 【苹果家庭iMessage推送】Aupperpushslcertificate或ProductPushsCertificate证书不可以过期
  20. 分享一个免费并开源的SSH连接工具

热门文章

  1. 去大学里当老师的待遇怎么样?
  2. zabbix安装grafana
  3. 【论文翻译】Fast R-CNN
  4. CentOS下my.cnf 配置
  5. virtualbox虚拟机--虚拟机的网络
  6. 弱电工程师必知的LAN 交换机与 SAN 交换机,今天来盘它!
  7. 景德镇三中2021高考成绩查询,2021年景德镇高考状元名单公布,景德镇高考状元学校资料及最高分...
  8. 低代码没有技术含量?来扒扒你所不了解的低代码
  9. 算法:循环赛日程表_一般化(n可以为奇数,也可以为偶数)
  10. 我PICK的Python专栏 | 寻找C站宝藏