对角线
题目描述
对于一个 n (3≤n≤1e5)个顶点的凸多边形,它的任何三条对角线都不会交于一点。请求出图形中对角线交点的个数。
输入格式
输入只有一行一个整数 nn,代表边数。
输出格式
输出一行一个整数代表答案。
输入输出样例
3
0
6
15
题解
由于题目描述可以看到,任何三条对角线都不会交于一点,也就是只会存在两条对角线相交于一点的情况,两条对角线确定四个顶点,也就是需要在n个顶点中挑选四个,求一共有多少种可能,于是就得到公式
n*(n-1)(n-2)(n-3)/24
为了防止超出unsigned long long范围,上式可化简为
n*(n-1)/2*(n-2)/3*(n-3)/4
(这里为什么用unsigned long long而不用long long,是因为测试数据100000时,long long会溢出而unsigned long long 不会)
代码
#include<bits/stdc++.h>
using namespace std;
#define ll unsigned long long
int main()
{
ll n;
cin>>n;
cout<<(n*(n-1)/2*(n-2)/3*(n-3)/4)<<endl;
return 0;
}