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