其他分享
首页 > 其他分享> > P2181 对角线

P2181 对角线

作者:互联网

题目传送门

\(n\)边形对角线个数 公式:\(n(n-3)/2\)

\(n\)边形对角线交点个数公式 : \(C_n^4\)

理由:
首先由于不会有三条对角线交于一点,所以过某一个交点有且只能有\(2\)条对角线。
而这两条对角线实质上是确定了\(4\)个顶点(也可以看做是一个四边形的两条对角线交于一点,求四边形的数量)。
因此我们只需要确定\(4\)个顶点就得到了这个唯一确定的交点。因此我们只需要求这样\(4\)个顶点的搭配有多少个了,也就是从\(n\)个顶点中取\(4\)个出来。

同时为了防止爆掉,但又不想写高精,我们可以采用一种化简的技巧,于是原式可以化为:

\(n * (n-1) / 2 * (n-2) / 3 * (n-3) / 4\)

那为什么这样一定是对的呢?难道不会因为除不尽却向下取整而导致错误吗?

事实上是一定除得尽的:

首先\(n\)和\(n-1\)一定有一个是\(2\)的倍数,因此\(2\)可以除尽,

同理\(n,n-1,n-2\)中一定有一个是\(3\)的倍数,因此\(3\)可以除尽(除掉\(2\)只会消除因数\(2\)而对\(3\)没有影响),同理\(4\)也可以除尽。

#include<bits/stdc++.h>

using namespace std;
typedef long long LL;
LL n, ans;

int main() {
    cin >> n;
    ans = n * (n - 1) / 2 * (n - 2) / 3 * (n - 3) / 4;
    printf("%lld\n", ans);
    return 0;
}

标签:对角线,P2181,ans,除尽,交点,顶点,边形
来源: https://www.cnblogs.com/littlehb/p/15678326.html