组合数学 - 对角线 - 洛谷 P2181

组合数学 - 对角线 - 洛谷 P2181

题目描述

对于一个 n 个顶点的凸多边形,它的任何三条对角线都不会交于一点。请求出图形中对角线交点的个数。

6 边形:
组合数学 - 对角线 - 洛谷 P2181_第1张图片
输入格式

输入只有一行一个整数 n,代表边数。

输出格式

输出一行一个整数代表答案。

输入输出样例

输入1:

3

输出1:

0

输入2:

6

输出2:

15

数据范围:

3 ≤ n ≤ 1 0 5 3 \leq n \leq 10^5 3n105


分析:

由 题 意 , 保 证 了 任 意 三 条 对 角 线 都 不 会 交 于 同 一 点 , 由题意,保证了任意三条对角线都不会交于同一点, 线

也 就 是 说 , 每 个 交 点 都 仅 有 两 条 对 角 线 唯 一 确 定 。 也就是说,每个交点都仅有两条对角线唯一确定。 线

那 么 每 个 交 点 就 对 应 两 条 对 角 线 , 即 四 个 顶 点 。 那么每个交点就对应两条对角线,即四个顶点。 线

问 题 等 价 于 我 们 从 n 个 点 中 选 择 4 个 点 , 问 一 共 有 多 少 种 的 方 案 。 问题等价于我们从n个点中选择4个点,问一共有多少种的方案。 n4

答 案 : C n 4 = n ( n − 1 ) ( n − 2 ) ( n − 3 ) 4 ! 答案:C_n^4=\frac{n(n-1)(n-2)(n-3)}{4!} Cn4=4!n(n1)(n2)(n3)

n 在 1 0 5 数 量 级 , 4 ! = 24 , 答 案 不 会 超 过 1 0 19 , 可 以 用 无 符 号 长 整 型 存 储 。 n在10^5数量级,4!=24,答案不会超过10^{19},可以用无符号长整型存储。 n1054!=241019

为 了 防 止 溢 出 , 我 们 做 乘 法 时 要 同 时 做 除 法 。 为了防止溢出,我们做乘法时要同时做除法。

因 为 n × ( n − 1 ) 必 有 因 子 2 , 故 我 们 在 计 算 n × ( n − 1 ) 后 立 即 除 2 ( 这 里 只 除 去 了 因 子 2 , 不 会 影 响 因 子 3 ) 因为n×(n-1)必有因子2,故我们在计算n×(n-1)后立即除2(这里只除去了因子2,不会影响因子3) n×(n1)2n×(n1)2(23)

同 理 , n × ( n − 1 ) × ( n − 2 ) 必 有 因 子 3 , 故 我 们 在 累 乘 上 n − 3 后 立 即 除 3 , 同理,n×(n-1)×(n-2)必有因子3,故我们在累乘上n-3后立即除3, n×(n1)×(n2)3n33

同 理 , 最 后 除 4. 同理,最后除4. 4.

代码:

#include

#define ull unsigned long long

using namespace std;

int main()
{
     
    ull n;
    cin>>n;
    cout<<(ull)n*(n-1)/2*(n-2)/3*(n-3)/4<<endl;
    return 0;
}

你可能感兴趣的:(数学,组合数学,ACM,算法)