計算幾何 組合 lg P2181 對角線

2021-10-24 18:24:02 字數 1130 閱讀 4169

通過題目明確不會有三條對角線交於一點,可以得出乙個交點有且僅有兩條對角線。故可以推導得到這兩條對角線可以唯一確定四個頂點。

即將問題轉化為n個頂點中,取4個的方案數,也就是組合數公式 cn4

=n∗(

n−1)

∗(n−

2)∗(

n−3)

24c_^ = \frac

cn4​=2

4n∗(

n−1)

∗(n−

2)∗(

n−3)

​在此由於改變四個點的順序不會改變對角線,所以是組合數而非排列數。

參照lg大佬的題解,學習了防溢位的方法,原式可等價變形為:cn4

=n∗(

n−1)

2∗(n

−2)3

∗(n−

3)

4c_^ = n * \frac * \frac * \frac

cn4​=n

∗2(n

−1)​

∗3(n

−2)​

∗4(n

−3)​

考慮上式除不盡而向下取整導致的錯誤:由 n

nn 與 n−1

n-1n−

1 這兩數中其中有乙個一定是 2

22 的倍數,所以 2

22 可以除盡,同理 n,n

−1,n

−2

n, n - 1, n - 2

n,n−1,

n−2 中一定有乙個是 3

33 的倍數,因此 3

33 可以除盡,同理可得 4

44 也可以除盡。故為等價變形。

對角線公式:n∗(

n−3)

2\frac

2n∗(n−

3)​且針對這個資料範圍不需要高精度,比long long大,但在unsigned long long中,仍需要等價變形,避免乘的時候溢位。

參見**如下:

#include

using

namespace std;

intmain()

洛谷P2181 對角線

對於乙個 n 個頂點的凸多邊形,它的任何三條對角線都不會交於一點。請求出圖形中對角線交點的個數。例如,6邊形 輸入格式 輸入只有一行乙個整數nn,代表邊數。輸出格式 輸出一行乙個整數代表答案。輸入輸出樣例輸入3 輸出0輸入6 輸出15 分析 由於任何三條對角線不交於同一點,所以2條對角線確定乙個點,...

P2181 對角線 洛谷

對於乙個 nn 個頂點的凸多邊形,它的任何三條對角線都不會交於一點。請求出圖形中對角線交點的個數。例如,66 邊形 輸入只有一行乙個整數 nn,代表邊數。輸出一行乙個整數代表答案。輸入 1複製 3輸出 1複製 0輸入 2複製 6輸出 2複製 15資料規模與約定 include int main 這是...

洛谷題目 P2181 對角線

題目描述 對於乙個 nnn 個頂點的凸多邊形,它的任何三條對角線都不會交於一點。請求出圖形中對角線交點的個數。例如,666 邊形 輸入格式 輸入只有一行乙個整數 nnn,代表邊數。輸出格式 輸出一行乙個整數代表答案。輸入輸出樣例 輸入 1 輸出 1 輸入 2 輸出 2 說明 提示 資料規模與約定 對...