題目大意:平面上有 $n$ 個點,第 $i$ 個點是 $(x_i,y_i)$。問有多少條拋物線(二次項係數為 $1$),經過這些點中不同的兩個點,並且內部(不含邊界)沒有任何這些點。重合的拋物線只算一次。
$1\le n\le 10^5,|x_i|,|y_i|\le 10^6$。
這題特別有趣。
考慮把拋物線方程重寫:$y-x^2=bx+c$。
那麼如果把每個點變成 $(x_i,y_i-x_i^2)$,那麼原來 $i,j$ 兩點的拋物線就變成了現在 $i,j$ 兩點的直線。
那麼答案就是上凸包的邊數。
時間複雜度 $o(n\log n)$。
#includeusingview codenamespace
std;
typedef
long
long
ll;const
int maxn=100010
;#define for(i,a,b) for(int i=(a);i<=(b);i++)
#define rof(i,a,b) for(int i=(a);i>=(b);i--)
#define mem(x,v) memset(x,v,sizeof(x))inline
intread()
struct
point
point
operator-(const point &p)const
; }
}p[maxn],pp[maxn],stk[maxn];
intn,m,tp;
ll cross(point p1,point p2)
intmain()
printf(
"%d\n
",tp-1
);}
計算幾何 凸包
有多個手機訊號發射器,求解乙個最小區域,要求所有的發射器都包含在這個最小區域中,並且任意兩台發射器之間的交流包含於在這個區域內。將所有的發射器看做為點,任意兩個點之間的連線都包含於乙個平面s 乙個平面的子集s 是凸的,當且僅當 s中的任意兩個點之間的連線都包含於 s中。點集 p的凸包是所有包含 p的...
計算幾何 凸包
如求凸包周長 include include include include include include using namespace std define pi 3.1415926 define eps 1e 10 class point 建立point類,裡面包含很多point的運算子 定...
計算幾何 凸包
凸多邊形 任意兩個頂點的連線都在多邊形內部,這樣的多邊形稱為凸多邊形 凸包的定義 乙個凸多邊形的頂點的集合 求凸包的一般形式 給出乙個點集,求出覆蓋所有點的最小凸多邊形 graham演算法 時間複雜度 o nlogn 極角排序耗時 先取出乙個端點,必須為凸包上的乙個點,取最下且最右的點即可 以端點進...