洛谷 P2181 對角線 全面分析

2022-06-02 10:03:08 字數 1342 閱讀 3388

對於乙個 \(n\) 個頂點的凸多邊形,它的任何三條對角線都不會交於一點。請求出圖形中對角線交點的個數。

練python刷簡單題刷到了這個,挺有趣的一道題目。

對於乙個 \(n\) 邊形,選任意乙個點a可以引出\(n-3\)條對角線。相鄰的點b再引出\(n-3\)條線,分別與前者有\(1,2 ... n-3\)個交點。與b相鄰且不與a相鄰的c引出\(n-4\)條線,交a引出的對角線有\(1,2 ... n-4\)個交點,b亦然。

有一篇**介紹得十分詳細 鏈結

故結果應為\(\sum\limits^_(i*\sum\limits^_)\quad= \quad\sum\limits^_i*\frac\)

**如下

n=int(input())

ans=0

i=1while true :

ans+=i*(n-(2+i))*(n-(1+i))//2

if n-(1+i)<=2 :

break

i+=1

print(ans)

此方法可以解決這個問題,時間複雜度\(o(n)\)

我暫時不會對上述和式求和,但推測通項可能是或四次的。故希望能\(o(1)\)解決這個問題。

令\(f(n)=\sum\limits^_\frac\) 易知\(f(3)=0,f(4)=1,f(5)=5,f(6)=15,f(7)=35\)

構建範德蒙德矩陣

\[v=vander(\begin3&4&5&6&7\end)

\]\[v*\vec a=\begin0&1&5&15&35\end^t

\]\[\vec a=\begin\frac&-\frac&\frac&-\frac&0\end^t

\]驗證\(n>=8\),成立。則

\[f(n)=[n^4\quad n^3\quad n^2 \quad n\quad1]\vec a

\]使用matlab計算這個問題

>> format rat

>> v=vander([3 4 5 6 7]);

>> inv(v)*[0;1;5;15;35]

ans =

1/24

-1/4

11/24

-1/4

-1/25588634246423

所以**為此簡單的三行

a=int(input())

a=a*a*a*a-a*a*a*6+a*a*11-a*6

print(a//24)

實際上,用組合數學的方法,我們知道,每四個不同的頂點有乙個交點,答案即是\(c^_n=\frac\)與以上結果相同。

洛谷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 說明 提示 資料規模與約定 對...