题意:给一些点,问这些点能够构成多少个凸四边形

做法:

1.直接判凸包

2.逆向思维,判凹包,不是凹包就是凸包了

怎样的四边形才是凹四边形呢?凹四边形总有一点在三个顶点的内部,假如顶点为A,B,C,D,则构成四个三角形:ABC,ACD,ABD,BCD,假如某一个三角形(最外的三个顶点)的面积等于另三个三角形面积之和,则是凹四边形。

然后做四个for循环,枚举即可,因为N最多才30.

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
using namespace std;
#define N 1007
#define M 33 struct Point
{
double x,y;
}p[]; double calc_area(Point a,Point b,Point c) //叉积求三角形面积
{
return fabs(a.x*b.y + c.x*a.y + b.x*c.y - c.x*b.y - a.x*c.y - b.x*a.y)*0.5;
} int main()
{
int t,i,n;
int j,k,h;
int cs = ;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=;i<n;i++)
scanf("%lf%lf",&p[i].x,&p[i].y);
int cnt = ;
for(i=;i<n-;i++)
{
for(j=i+;j<n-;j++)
{
for(k=j+;k<n-;k++)
{
for(h=k+;h<n;h++)
{
double Area1 = calc_area(p[i],p[j],p[k]);
double Area2 = calc_area(p[i],p[j],p[h]);
double Area3 = calc_area(p[j],p[k],p[h]);
double Area4 = calc_area(p[i],p[k],p[h]);
//printf("%lf %lf %lf %lf\n",Area1,Area2,Area3,Area4);
if(fabs(Area1-Area2-Area3-Area4) < eps)
continue;
if(fabs(Area2-Area3-Area4-Area1) < eps)
continue;
if(fabs(Area3-Area1-Area2-Area4) < eps)
continue;
if(fabs(Area4-Area1-Area2-Area3) < eps)
continue;
cnt++;
}
}
}
}
printf("Case %d: %d\n",cs++,cnt);
}
return ;
}

FZU 2148 Moon Game --判凹包的更多相关文章

  1. ACM: FZU 2148 Moon Game - 海伦公式

     FZU 2148  Moon Game Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64 ...

  2. FZU 2148 Moon Game

    Moon Game Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit St ...

  3. FZU 2148 moon game (计算几何判断凸包)

    Moon Game Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit St ...

  4. FZOJ Problem 2148 Moon Game

                                                                                                  Proble ...

  5. fzu Problem 2148 Moon Game(几何 凸四多边形 叉积)

    题目:http://acm.fzu.edu.cn/problem.php?pid=2148 题意:给出n个点,判断可以组成多少个凸四边形. 思路: 因为n很小,所以直接暴力,判断是否为凸四边形的方法是 ...

  6. FZU Problem 2148 Moon Game (判断凸四边形)

    题目链接 题意 : 给你n个点,判断能形成多少个凸四边形. 思路 :如果形成凹四边形的话,说明一个点在另外三个点连成的三角形内部,这样,只要判断这个内部的点与另外三个点中每两个点相连组成的三个三角形的 ...

  7. 暴力(判凸四边形) FZOJ 2148 Moon Game

    题目传送门 题意:给了n个点的坐标,问能有几个凸四边形 分析:数据规模小,直接暴力枚举,每次四个点判断是否会是凹四边形,条件是有一个点在另外三个点的内部,那么问题转换成判断一个点d是否在三角形abc内 ...

  8. (求凹包) Bicycle Race (CF 659D) 简单题

    http://codeforces.com/contest/659/problem/D     Maria participates in a bicycle race. The speedway t ...

  9. Moon Game (凸四边形个数,数学题)

    Problem 2148 Moon Game Accept: 24    Submit: 61 Time Limit: 1000 mSec    Memory Limit : 32768 KB Pro ...

随机推荐

  1. (旧)子数涵数·DW——图文混排页面

    一.首先,打开Dreamweaver,新建一个的HTML项目. 二.在设计区里,写一些文字,随便写一点(也可以在代码区中的<body>和</body>之间写). 三.插入一张图 ...

  2. sqlite3之基本操作(二)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python自带一个轻量级的关系型数据库SQLite.这一数据库使用SQL语言.S ...

  3. ahjesus约束方法或属性的调用方

    class Program { static void Main(string[] args) { test(); run(); Console.ReadKey(); } static void ru ...

  4. Android总结篇系列:Android 权限

    权限是一种安全机制.Android权限主要用于限制应用程序内部某些具有限制性特性的功能使用以及应用程序之间的组件访问.在Android开发中,基本上都会遇到联网的需求,我们知道都需要加上联网所需要的权 ...

  5. Angularjs,WebAPI 搭建一个简易权限管理系统 —— 基本功能演示(二)

    目录 前言 Angularjs名词与概念 Angularjs 基本功能演示 系统业务与实现 WebAPI项目主体结构 Angularjs 前端主体结构 基本功能演示(二) 非常抱歉这个月实在太忙,一直 ...

  6. 我所了解的WEB开发 (1)

    开始接触网站开发的时候,概念里就对静态网站和动态网站有了简单的区分,静态网站仅仅是纯粹的HTML网页,动态网站是需要采用asp 连接数据库(比如access).那个时候听说高手都是使用 Notepad ...

  7. play framework学习笔记之 模板引擎

    模板语法 ${client.name} ${client?.name} 不能确定client是否存在的时候? #{extends /} #{doLayout /}#{get} #{set} 比如 #{ ...

  8. java开发-技能要求-分词频度统计

    描述: 一哥们离职找工作,最近聊了聊面试待遇要求一类的事情,有些感触. 在一个公司呆的时间长了,对市场上对开发的要求已经不那么敏感了,也不知道人家要求哪些技能.一个公司的业务是有限的,呆了2年,3年, ...

  9. 纯CSS仿windows系统loading效果

    今天分享的css3案例模仿了window系统下的loading效果里面最关键的地方使用了css3 animation的delay属性以及贝塞尔曲线(cubic-bezier)的过渡效果,如下所示 sp ...

  10. ES6的Class

    类的基本写法: constructor构造函数其实就相当于ES5中的构造函数,用于定义类的实例属性: 而在类中定义的其他方法像这里的toString方法就相当于ES5中定义在原型prototype上的 ...