題目的大致意思就是給你n個點。讓你計算這個點可以構成的凸四邊形的個數。
看到乙個超級厲害的解法。就是道理其實都懂可是我就是沒想到。所以覺得他厲害吧。
對於乙個凹四邊形來說。把各個頂點相連。就會得到三個三角形。這三個三角形的面積加和就等於大三角形的面積。凸三角形就不行。自己畫畫就能想到了。
直接上**吧。
#include
#include
#include
#include
using
namespace
std;
struct pointarr[35];
double area(int a,int b,int c)
int judge(int a,int b,int c,int d)
return1;}
int main()
int ans=0;
for(int i=0;ifor(int j=i+1;jfor(int k=j+1;kfor(int l=k+1;lif(judge(i,j,k,l)&&judge(i,j,l,k)&&judge(j,l,k,i)&&judge(i,l,k,j))}}
}}
printf("case %d: %d\n",++kase,ans);
}return
0;}
關於那個三角形面積計算公式啊。
就是可以用三個點的座標就可以求面積。
設a(x1,y1),b(x2,y2),c(x3,y3)
由a–>b–>c–>a 按逆時針方向轉。(行列式書寫要求)
設三角形的面積為s
則s=(1/2)*(下面行列式)
|x1 y1 1|
|x2 y2 1|
|x3 y3 1|
s=(1/2)*(x1y2*1+x2y3*1+x3y1*1-x1y3*1-x2y1*1-x3y2*1)
即用三角形的三個頂點座標求其面積的公式為:
s=(1/2)*(x1y2+x2y3+x3y1-x1y3-x2y1-x3y2)
求任意個點的凸包問題
凸包 convex hull 是乙個計算幾何 圖形學 中的概念。在乙個實數 向量空間 v中,對於給定集合x,所有包含x的 凸集 的 交集 s被稱為x的凸包。x的凸包可以用x內所有點 x1,xn 的 線性組合 來構造.在二維歐幾里得空間 中,凸包可想象為一條剛好包著所有點的橡皮圈。用不嚴謹的話來講,給...
N個點求最大的四邊形面積
題意 平面上n個點 n 300 問任意四個點組成的四邊形 保證四條邊不相交 的最大面積是多少。分析 1 第一思路是列舉四個點,以o n4 的演算法妥妥超時。2 以下思路源自官方題解 以o n2 列舉每一條邊,以這條邊作為四邊形的對角線 注意 這裡所說的對角線是指把四邊形分成兩部分的線,不考慮凹四邊形...
平面上N個點,求斜率最大的那條直線通過的兩點
平面上n個點,每兩個點都確定一條直線,求出斜率最大的那條直線所通過的兩個點 斜率不存在的情況不考慮 時間效率越高越好。關於這道題,網上已經給出了解答要點 3個點a,b,c,把它們的按x座標排序。假設排序後的順序是abc,那麼有兩種情況 1.abc共線,則k ab k bc k ac 2.abc不共線...