【暴力+排除法】FZU 2148 Moon Game

比赛地址:点击打开链接

比赛做粗的4个题几乎都是水,感觉弱的水爆炸了。

这个题最初的思路是枚举找出四个点,做凸多边形的模板判断。C(30,4)。

结果答案不对。。后来发现模板上是要求点对的顺序是逆时针或顺时针输入。

于是用时钟排序的函数排序后判断:

bool cmp(point p1, point p2)
{
    return atan2(p1.y, p1.x) < atan2(p2.y, p2.x);
}

结果tle了两遍。。

最后发现其实不用模板上这样。可以用判断是不是凹多边形的办法,反正总体是可以确定的。

判断是否为凸四边形的方法是:如果4个点中存在某个点D,Sabd + Sacd + Sbcd = Sabc,那么不是凸四边形。

#include <stdlib.h>
#include <math.h>
#include <cstring>
#include <iostream>
#include <stdio.h>
#include <algorithm>
#define MAXN 1000
#define offset 10000
#define eps 1e-8
#define zero(x) (((x)>0?(x):-(x))<eps)
#define _sign(x) ((x)>eps?1:((x)<-eps?2:0))
using namespace std;

class point
{
public:
    int x,y;
    int flag;
};

class line
{
public:
    point a,b;
};

double xmult(point a,point b,point c)
{
	return fabs((b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x))/2;
}

bool is_convex(point a,point b,point c,point d)
{
    if(fabs(xmult(b,c,d)-xmult(a,b,c)-xmult(a,c,d)-xmult(a,b,d))<eps)
        return false;
    return true;
}
/*
int is_convex(int n,point* p){
	int i,s[3]={1,1,1};
	for (i=0;i<n&&s[1]|s[2];i++)
		s[_sign(xmult(p[(i+1)%n],p[(i+2)%n],p[i]))]=0;
	return s[1]|s[2];
}*/

bool cmp(point p1, point p2)
{
    return atan2(p1.y, p1.x) < atan2(p2.y, p2.x);
}
int main()
{
    point res[4];
    point tar[31];
    int testcase;
    scanf("%d",&testcase);
    for(int cnt=1;cnt<=testcase;cnt++)
    {
        int pointnum;
        scanf("%d",&pointnum);

        for(int i=0;i<pointnum;i++)
        {
             scanf("%d%d",&tar[i].x,&tar[i].y);
        }

        int h=0;

        for(int a=1;a<=pointnum-3;a++)
        {
            for(int b=a+1;b<=pointnum-2;b++)
            {
             for(int c=b+1;c<=pointnum-1;c++)
             {
                 for(int d=c+1;d<=pointnum;d++)
                 {

                     res[0].x=tar[a-1].x;
                     res[0].y=tar[a-1].y;

                     res[1].x=tar[b-1].x;
                     res[1].y=tar[b-1].y;

                     res[2].x=tar[c-1].x;
                     res[2].y=tar[c-1].y;

                     res[3].x=tar[d-1].x;
                     res[3].y=tar[d-1].y;

                    if(is_convex(res[0],res[1],res[2],res[3])&&is_convex(res[1],res[0],res[2],res[3])
                       && is_convex(res[2],res[0],res[1],res[3]) && is_convex(res[3],res[0],res[1],res[2]))
                        h++;
                 }
             }

            }

        }
        printf("Case %d: %d\n",cnt,h);

    }
    return 0;
}

【暴力+排除法】FZU 2148 Moon Game

时间: 2024-08-27 04:40:23

【暴力+排除法】FZU 2148 Moon Game的相关文章

ACM: FZU 2148 Moon Game - 海伦公式

FZU 2148  Moon Game Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description Fat brother and Maze are playing a kind of special (hentai) game in the clearly blue sky which we can just consider as a kind of two-dimensio

FZU 2148 Moon Game --判凹包

题意:给一些点,问这些点能够构成多少个凸四边形 做法: 1.直接判凸包 2.逆向思维,判凹包,不是凹包就是凸包了 怎样的四边形才是凹四边形呢?凹四边形总有一点在三个顶点的内部,假如顶点为A,B,C,D,则构成四个三角形:ABC,ACD,ABD,BCD,假如某一个三角形(最外的三个顶点)的面积等于另三个三角形面积之和,则是凹四边形. 然后做四个for循环,枚举即可,因为N最多才30. 代码: #include <iostream> #include <cstdio> #include

FZU 2148 Moon Game

Moon Game Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice FZU 2148 Description Fat brother and Maze are playing a kind of special (hentai) game in the clearly blue sky which we can just consider as

FZU 2148 Moon Game 判断凸边形

点击打开链接 Problem 2148 Moon Game Accept: 512    Submit: 1419 Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem Description Fat brother and Maze are playing a kind of special (hentai) game in the clearly blue sky which we can just consider as a k

FZU 2148 Moon Game (枚举+几何)

 Problem 2148 Moon Game Accept: 403    Submit: 1126Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem Description Fat brother and Maze are playing a kind of special (hentai) game in the clearly blue sky which we can just consider as a kind of

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

Moon Game Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Description Fat brother and Maze are playing a kind of special (hentai) game in the clearly blue sky which we can just consider as a kind of two-dime

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

题目链接 题意 : 给你n个点,判断能形成多少个凸四边形. 思路 :如果形成凹四边形的话,说明一个点在另外三个点连成的三角形内部,这样,只要判断这个内部的点与另外三个点中每两个点相连组成的三个三角形的面积和要与另外三个点组成的三角形面积相同. 中途忘了加fabs还错了好几次 1 //FZU2148 2 #include <cstdio> 3 #include <cstring> 4 #include <iostream> 5 #include <cmath>

FZU_ Problem 2148 Moon Game

 Problem 2148 Moon Game Accept: 386    Submit: 1080 Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem Description Fat brother and Maze are playing a kind of special (hentai) game in the clearly blue sky which we can just consider as a kind of

FZOJ Problem 2148 Moon Game

                                                                                              Problem 2148 Moon Game Problem Description Fat brother and Maze are playing a kind of special (hentai) game in the clearly blue sky which we can just consid