FOJ 2148(求凸四边形数量)
2014-01-23 23:30
330 查看
题意:给n个点,求图中凸四边形的数量。
解法:n<=30,就暴力吧。n^4 ^_^。如果四个点构成一个凸四边形,那么任意一个点和其他三个点组成的三个三角形面积一定大于其余三个点组成的三角形面积大。
代码:
解法:n<=30,就暴力吧。n^4 ^_^。如果四个点构成一个凸四边形,那么任意一个点和其他三个点组成的三个三角形面积一定大于其余三个点组成的三角形面积大。
代码:
#include <iostream> #include <stdio.h> using namespace std; struct point { int x,y; } points[40]; int abs(int k){if(k<0) return -k;return k;} int mult(point a,point b,point c) { a.x-=c.x; a.y-=c.y; b.x-=c.x; b.y-=c.y; return abs(a.x*b.y-a.y*b.x); } bool OK(point a,point b,point c,point d) { if(mult(a,b,c)+mult(a,c,d)+mult(a,b,d)<=mult(b,c,d)) return false; if(mult(b,a,c)+mult(b,c,d)+mult(b,a,d)<=mult(a,c,d)) return false; if(mult(c,a,b)+mult(c,b,d)+mult(c,a,d)<=mult(a,b,d)) return false; if(mult(d,a,b)+mult(d,b,c)+mult(d,a,c)<=mult(a,b,c)) return false; return true; } int n; int main() { int t;cin>>t;int an=1; while(t--) { cin>>n; for(int i=0;i<n;i++) scanf("%d%d",&points[i].x,&points[i].y); int ans=0; for(int i=0;i<n;i++) for(int j=i+1;j<n;j++) for(int k=j+1;k<n;k++) for(int h=k+1;h<n;h++) { if(OK(points[i],points[j],points[k],points[h])) ans++; } printf("Case %d: %d\n",an,ans);an++; } return 0; }
相关文章推荐
- FOJ 2148 给定的二维坐标 能构成的凸四边形数
- foj 2148 Moon Game 判断n个点有几个凸四边形 + 枚举4个点 + 判断点在三角形外
- FZU 2148 (判凸四边形 || 暴力 + 快速排斥实验 + 跨立实验)
- Fzu 2148 Moon Game 判断凸四边形 判断线段相交
- FZU Problem 2148 Moon Game (判断凸四边形)
- I - Moon Game FZU - 2148 (叉积,凸四边形)
- Squares 四边形数量,求坐标很重要
- FZU 2148 ——Moon Game 判断凸四边形
- Foj 2148 二维几何(点是否在三角形内)
- FZU-2148 求n个点构成的凸四边形的个数
- FZU 2148: Moon Game 四边形的月亮
- FZU 2148 Moon Game(判断凸四边形的个数)
- hdu4612 无向图中任意添加一条边后使桥的数量最少 / 无向图缩点+求树的直径
- 蓝桥杯--核桃的数量
- 深度分析如何在Hadoop中控制Map的数量
- js统计页面上每个标签的数量实例代码
- [lua] lua 函数 upvalue 数量限制
- U8预测购货数量和实际发货数量对比分析
- juery每行单价、数量、金额的计算
- OKEx货币对价格数量长度及精度