1. 程式人生 > >【計算幾何】HDU 2108 Shape of HDU 凸包

【計算幾何】HDU 2108 Shape of HDU 凸包

題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=2108

#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;

struct point { double x,y; };
bool mult(point sp,point ep,point op){
    return (sp.x-op.x)*(ep.y-op.y)>=(ep.x-op.x)*(sp.y-op.y);
}

bool operator < (const point &l,const point &r){
    return l.y<r.y || (l.y==r.y && l.x < r.x);
}

int graham(point pnt[],int n,point res[]){ //pnt是圖中的所有的點,res是通過判斷後在凸邊行邊上的點,而且這些點都是按逆時針儲存的,n是所有點的個數
    int i,len,k = 0,top = 1;
    sort(pnt,pnt+n);
    if(n == 0) return 0; res[0]=pnt[0];
    if(n == 1) return 1; res[1]=pnt[1];
    if(n == 2) return 2; res[2]=pnt[2];
    for(i=2;i<n;i++) {
        while(top && mult(pnt[i],res[top],res[top-1]))
            top--;
        res[++top] = pnt[i];
    }
    len = top; res[++top] = pnt[n-2];
    for(i=n-3;i>=0;i--){
        while(top!=len && mult(pnt[i],res[top],res[top-1]))
            top--;
        res[++top]=pnt[i];
    }
    return top; // 返回凸包中點的個數
}

point res[50001],pnt[50001];

int main() {
    int n;
    while(~scanf("%d",&n) && n) {
        for(int i=0;i<n;i++) scanf("%lf%lf",&pnt[i].x,&pnt[i].y);
        if(graham(pnt,n,res) == n) puts("convex");
        else puts("concave");   
    }
    return 0;    
}


相關推薦

計算幾何HDU 2108 Shape of HDU

題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=2108 #include<cstdio> #include<cstring> #include<iostream> #include<c

計算幾何CDOJ1720 幾何幾何

-a section fin wap line [0 turn tor std #include<cstdio> #include<algorithm> #include<cmath> using namespace std; #d

計算幾何預處理枚舉Urozero Autumn Training Camp 2016 Day 5: NWERC-2016 Problem K. Kiwi Trees

相交 const put vector freopen n) math turn blog 發現由於角的度數和邊的長度有限制,那倆圓如果放得下的話,必然是塞在兩個角裏。 於是預處理n個圓心的位置(註意要判斷那個圓會不會和其他的邊界相交),然後n^2枚舉倆角即可。 #inc

計算幾何分類討論Gym - 101173C - Convex Contour

turn ace return highlight gym rotate ons ltr sqrt 註意等邊三角形的上頂點是卡不到邊界上的。 於是整個凸包分成三部分:左邊的連續的三角形、中間的、右邊的連續的三角形。 套個計算幾何板子求個三角形頂點到圓的切線、三角形頂點到正方

計算幾何bitsetGym - 101412G - Let There Be Light

bit pen urn 接受 eset iostream scan || names 三維空間中有一些(<=2000)氣球,一些光源(<=15),給定一個目標點,問你在移除不超過K個氣球的前提下,目標點所能接受到的最大光照。 枚舉每個光源,預處理其若要照射到光源

hdu_6055 : Regular polygon (2017 多校第二場 1011) 計算幾何

include int scan ble pro set sort 根據 可能 題目鏈接 有個結論: 平面坐標系上,坐標為整數的情況下,n個點組成正n邊形時,只可能組成正方形。 然後根據這個結論來做。 我是先把所有點按照 x為第一關鍵字,y為第二關鍵字 排序,然後枚舉向量

計算幾何圓反演hdu6158 The Designer

using 技術分享 技術 幾何 ++i %d mat 圓的面積 logs 給你內外那倆圓的半徑,讓你按圖中標號的順序往縫裏塞n個小圓,問你小圓的總面積。 不知道圓反演的先去查一下定義。 將兩個圓的切點視作反演中心,任取反演半徑(比如1),將兩個圓反演成兩條平行直線,則那

計算幾何分類討論Gym - 101243I - Land Division

log clas algo 答案 cto esp turn 端點 name 題意:給你一個n個點的凸包,讓你切一刀,使得它變成一個m邊形和一個K邊形,問你切的這一刀最短是多少。 如果m+K==n+4,那麽一定切在兩條邊上,但是由於兩個線段間的最短距離,至少會經過一條線段的

計算幾何DPtarjanDay 10.6

long long pri cout logs 前綴 ret ble freopen style T1 計算幾何+遞推 1 #include <cstdio> 2 #include <cmath> 3 double w,x,r; 4 int

計算幾何二分圖判定Gym - 101485C - Cleaning Pipes

你是 i+1 ace 機器 ble mes 方案 clu str 題意:有n個水井,每個水井發出一些管線(都是線段),然後每條管線上最多只有一個水井。所有從不同的水井發出的管線的相交點都是清潔點(不存在清潔點是大於兩條管線點的交點)。你需要在某些管線上放出一些機器人,它們會

計算幾何如何計算兩個圓的交點坐標

style coo 正交 ces sta 設定 由於 直接 ima How to calculate two coordinates of the intersection points of two circles? 題目:   給定兩個圓的的方程     (x-x1)^

bzoj 4814: [Cqoi2017]小Q的草稿計算幾何

double include amp per AC == urn 幾何 char //先打個50暴力,10min50分簡直美滋滋~ #include<iostream> #include<cstdio> #include<algorithm&g

poj1584 A round peg in a ground hole計算幾何

instead end 是不是 clas 計算幾何 you 否則 cto let 含【判斷凸包】,【判斷點在多邊形內】,【判斷圓在多邊形內】模板 凸包:即凸多邊形 用不嚴謹的話來講,給定二維平面上的點集,凸包就是將最外層的點連接起來構成的凸多邊形,它能包含點集中所有的點

poj1039 Pipe計算幾何

sid sha n) ria lan lag != sum mit 含【求直線交點】、【判斷直線與線段相交】模板 Pipe Time Limit: 1000MS Memory Limit: 10000K Total Submissions:11940

計算幾何

一、基礎概念 1.點: 在解決平面幾何問題時,都是在平面座標系下計算。點都用A(x,y)來表示。 對於一個點(x,y),它既可以表示一個點,也可以表示一個向量。   2.向量 向量可以形象化地表示為帶箭頭的線段。箭頭所指代表向量的方向,線段的長度代表向量的大小。如果

計算幾何多邊形點集排序

問題描述:已知多邊形點集C={P1,P2,...,PN},其排列順序是雜亂,依次連線這N個點,無法形成確定的多邊形,需要對點集C進行排序後,再繪製多邊形。 點集排序過程中,關鍵在於如何定義點的大小關係。 以按逆時針排序為例,演算法步驟如下: 定義:點A在點B的逆時針方向,則點A大於點B

POJ 1410 Intersection 判斷線段交和點在矩形內 計算幾何

Intersection Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9996 Accepted: 2632 Description You are to

點在多邊形內外的判斷計算幾何

點在多邊形內外的判斷有兩種處理方法:射線法和轉腳法 一、射線法: 從這一點出發,引向無窮遠點的一條射線,根據交點情況確定點的位置 特點:特殊情況不易處理 以要判斷的點為起點,任做一條射線,計算該射線與多邊形的交點的數目 若有偶數個交點,則點在多邊形外;否則,點在多邊形

POJ 1696 Space Ant(極角排序)計算幾何

Space Ant Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2489 Accepted: 1567 Description The most exci

POJ 2826 An Easy Problem?! 叉積求多邊形面積 計算幾何

An Easy Problem?! Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7837 Accepted: 1145 Description It's