程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> POJ 2187 Beauty Contest (凸包)

POJ 2187 Beauty Contest (凸包)

編輯:C++入門知識

POJ 2187 Beauty Contest (凸包)


題目地址:POJ 2187

凸包第一發。。用的大白書上的andew算法。

先求出凸包,然後最大距離一定是凸包之中的某兩點之間的距離,然後枚舉找出最大值。

代碼如下:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;
#define LL long long
const int INF=0x3f3f3f3f;
int top, n;
struct Point
{
    int x, y;
}p[100000], tu[100000];
int dist(Point x, Point y)
{
    return (x.x-y.x)*(x.x-y.x)+(x.y-y.y)*(x.y-y.y);
}
Point operator - (Point x, Point y)
{
    Point z;
    z.x=x.x-y.x;
    z.y=x.y-y.y;
    return z;
}
int Cross(Point x, Point y)
{
    return x.x*y.y-x.y*y.x;
}
int cmp(Point x, Point y)
{
    if(x.x==y.x) return x.yy?x:y;
}
void Andew()
{
    int i, j, k;
    sort(p,p+n,cmp);
    top=0;
    for(i=0;i1&&Cross(tu[top-1]-tu[top-2],p[i]-tu[top-1])<=0) top--;
        tu[top++]=p[i];
    }
    k=top;
    for(i=n-2;i>=0;i--)
    {
        while(top>k&&Cross(tu[top-1]-tu[top-2],p[i]-tu[top-1])<=0) top--;
        tu[top++]=p[i];
    }
    int max1=-1;
    for(i=0;i

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved