zoukankan      html  css  js  c++  java
  • poj 1228 Grandpa's Estate

    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    #define Max 1000
    struct Point
    {
        int x,y;
    }p[Max],res[Max];
    int xmult(Point p1,Point p2,Point p0)
    {
        return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
    }
    bool cmp(Point p1,Point p2)
    {
        if(p1.y<p2.y||p1.y==p2.y&&p1.x<p2.x)
        return true;
        return false;
    }
    int Graham(Point *p,int n)
    {
        int i,len,top=1;
        sort(p,p+n,cmp);
        if(n==0)
        {
            return 0;
        }
        res[0]=p[0];
        if(n==1)
        {
            return 1;
        }
        res[1]=p[1];
        if(n==2)
        {
            return 2;
        }
        res[2]=p[2];
        for(i=2;i<n;i++)
        {
            while(top&&xmult(res[top],p[i],res[top-1])<0)
            {
                top--;
            }
            res[++top]=p[i];
        }
        len=top;//判断是否只有一半
        res[++top]=p[n-2];
        for(i=n-3;i>=0;i--)
        {
            while(len!=top&&xmult(res[top],p[i],res[top-1])<0)
            {
                top--;
            }
            res[++top]=p[i];
        }
        return top;
    }
    int main()
    {
        int _case,n,i;
        scanf("%d",&_case);
        while(_case--)
        {
            scanf("%d",&n);
            for(i=0;i<n;i++)
                scanf("%d%d",&p[i].x,&p[i].y);
            n=Graham(p,n);
            int j=0,bj=0,ji=1;
            res[n++]=res[0];
            res[n++]=res[1];
            for(i=1;i<n;i++)
            {
                if(!xmult(res[i],res[i+1],res[j]))
                {
                    bj++;
                    while(!xmult(res[i],res[i+1],res[j]))i++;
                    j=i;
                    if(j!=n-2)ji++;
                    //printf()
                    //printf("#%d %d
    ",ji,bj);
                }
                else break;
            }
            //printf("#%d %d
    ",ji,bj);
            if(ji>=3&&bj==ji)
                printf("YES
    ");
            else
                printf("NO
    ");
        }
        return 0;
    }

  • 相关阅读:
    多进程交替控制输出
    最长不重复子串
    const关键字的使用
    C++类的内存分布
    shell编程--awk 、sed 命令介绍
    gcc 6.0编译opencv出错
    NTP同步网络时间
    树莓派配置RTC时钟(DS3231,I2C接口)
    浏览器播放rtmp流
    nginx配置hls
  • 原文地址:https://www.cnblogs.com/XDJjy/p/3236132.html
Copyright © 2011-2022 走看看