洛谷P2785 物理1 phsic1 磁通量

2022-05-09 20:05:45 字數 991 閱讀 1355

隨便翻到的一道題......

題目傳送門

這道題是用向量叉積求多邊形面積。

首先講一下向量叉積(也叫外積)。

設兩個向量的座標表示為(x1,y1)、(x2,y2)。

那麼它們的叉積為x1*y2-x2*y1。

其幾何意義為兩個向量所成的平行四邊形的面積(淺藍色部分)。

兩個向量的叉積與這兩個向量都垂直,且有正負之分。

叉積的正負取決於兩向量夾角sin值的正負(圖中叉積均為:綠向量×紅向量)。

對於兩個點a、b以及原點o,向量oa與向量ob的叉積的一半代表三角形oab的面積。

這樣我們就能通過這個把多邊形分割成三角形,進而求出多邊形的面積。

對於下面這個四邊形abcd:

s(abcd)=s(oab)+s(obc)-s(ocd)-s(oda)。

我們沿著多邊形走一周,依次加上(或減掉)相鄰的兩個頂點與原點形成的三角形的面積就行。

三角形的面積就用叉積算嘛。

而且你可以發現向量的叉積特別可愛,都不需要你判斷是該加上還是該減掉。

叉積算出來是正的,對面積的貢獻就為正;是負的,對面積的貢獻就為負。

最後別忘了最後乙個點和第乙個點也要求一下叉積。

所以多邊形的面積就這麼愉快地算出來啦~

1 #include2

3intn;4

double

b,ans;56

struct

vec7

a[1000005

];10

11double

cross(vec q,vec w)

1215

16int

main()

17

洛谷 P3372 線段樹 1

今天植樹節,來種一棵線段樹。傳送門如題,已知乙個數列,你需要進行下面兩種操作 1.將某區間每乙個數加上x 2.求出某區間每乙個數的和 輸入格式 第一行包含兩個整數n m,分別表示該數列數字的個數和操作的總個數。第二行包含n個用空格分隔的整數,其中第 i 個數字表示數列第 i 項的初始值。接下來m行每...

洛谷P3374 樹狀陣列 1

乙個數列,滿足如下操作 給其中乙個數加x 求區間和 數列長度n,運算元m滿足1 n m 500000 1 n,m 500000 1 n m 5 0000 0樹狀陣列基礎支援這兩種操作,核心思想是將 1 i 的整體和分成許多個小的區間和,分割的條件是二進位制拆分。首先介紹乙個lowbit,意思是取到二...

洛谷 P2097 資料分發1

有一些電腦,一部分電腦有雙向資料線連線。如果乙個電腦得到資料,它可以傳送到的電腦都可以得到資料。現在,你有這個資料,問你至少將其輸入幾台電腦,才能使所有電腦得到資料。輸入格式 第一行兩個數n,m。n是點數,m是邊數。接下來m行,每行2個整數p,q表示p到q有一條雙向資料線。輸出格式 乙個整數,表示至...