原題:
題意:二維平面上給出許多點,起點(0,0)終點(m,0)。選一些點,相鄰兩個點i,j之間產生乙個權值,(xi× yj − xj×yi),其實就是叉積。 要求權值和最小,起點和終點必須選。點可以重合,如果有多個答案要求輸出字典序最小的。
這個叉積就可以轉換成乙個圖形的面積,它又要求這個值最小,其實就是要求面積最大(因為是順時針的吧?)。這個方塊必須是凸著的。 然後就變成求乙個凸包了。
#include
using
namespace
std;
int t,n;
struct point
friend
long
long
operator ^(point &a,point &b)
};point a[200005];
// 按x從小到大,y從小到大排序
bool cmp(point a,point b)
else
}return a.x < b.x;
}point s[200005];
int top = 0;
bool judge(point a,point b,point c)
else
return
false;
}int main()
sort(a + 1,a + 1 + n,cmp);
// graham掃瞄法?是這個思想吧
top = 0;
s[top++] = a[1];
s[top++] = a[2];
for(int i = 3; i <= n; i++)
s[top++] = a[i];
}for(int i = 0; i < top; i++)
}return
0;}
hdu 1616 計算幾何 凸包
題意是乙個世界有許多個國家,每個國家有n個建築,包括乙個發電站和n 1個用電建築,所有建築圍成的凸包就是這個國家的面積。一枚飛彈如果在乙個國家之內 則可以使這個國家停電。step 1 求出每個國家的凸包 我用水平排序就是各種坑,改叉乘排序才過,主要是後面求面積的時候需要這個叉乘排序的資訊 step ...
計算幾何 凸包
有多個手機訊號發射器,求解乙個最小區域,要求所有的發射器都包含在這個最小區域中,並且任意兩台發射器之間的交流包含於在這個區域內。將所有的發射器看做為點,任意兩個點之間的連線都包含於乙個平面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的運算子 定...