P2181 对角线(组合数学)
题目描述
对于一个 n个顶点的凸多边形,它的任何三条对角线都不会交于一点。请求出图形中对角线交点的个数。
例如,66 边形:
输入格式
输入只有一行一个整数 n,代表边数。
输出格式
输出一行一个整数代表答案。
输入输出样例
输入 #1复制
3
输出 #1复制
0
输入 #2复制
6
输出 #2复制
15
说明/提示
数据规模与约定
- 对于 50% 的数据,保证 3≤n≤100。
- 对于 100% 的数据,保证 3≤n≤10的五次方。
排列组合(补充知识点)
-
排列(P/A)
从给定个数的元素中取出指定个数的元素进行排序
-
组合©
从给定个数的元素中取出指定个数的元素,不考虑排序
坑:n^4会爆ll,所以得开ull
long long 和 unsigned long long区别:
ll有负数,ull没有;
ull(1e20)差不多是ll(1e19)的两倍。
code
#include <bits/stdc++.h>
using namespace std;
/*
理解对角线的实质:
(如:题中的提示——任何三条对角线都不会交于一点),
所以四点确定一个对角线交点,
所以题目转换成:在n个点中选取4个点,不考虑排序的组合问题
*/
unsigned long long n,ans;
int main()
{
cin>>n;
ans = n*(n-1)/2*(n-2)/3*(n-3)/4;
cout<<ans;
return 0;
}