一道相关的洛谷题目
看到题目的时候只有一个思路, 由之前的多边形和对角线加上一个点,构成现有的多边形,在这个基础上再连接其余各个顶点构成新的对角线。然后发现总结不了规律。
于是查看题解,看懂了。具体思路是这样的,多边形中每一个顶点都是由两条唯一确定的(不会有三条线交于同一个点的情况),而每条对角线又是由两个顶点唯一确定的。所以一个点两条对角线就对应了四个顶点,也就是一个四边形。
我们只要从这个多边形和其中的对角线中找出有多少个四边形就解决了。 公式就是简单的组合数公式。
#include<bits/stdc++.h>
using namespace std;
int main() {
unsigned long long n, l;
cin >> n;
l = n * (n-1) / 2 * (n-2) / 3 * (n-3) / 4;
cout << l;
return 0;
}
值得注意的细节:
- 这道题的数据范围 要用usigned longlong
- 证明n * (n-1) * (n-2) * (n-3)可以被(2*3*4)整除。首先n和n-1一定有一个是2的倍数,因此2可以除尽,同理n,n-1,n-2中一定有一个是3的倍数,因此3可以除尽(除掉2只会消除因数2而对3没有影响)同理4也可以除尽 (来自洛谷题解
学到了)
思路来自洛谷题解