P7900 [COCI2006-2007#2] SJECIŠTA_题解
[COCI2006-2007#2] SJECIŠTA_题解
rt
-
我们来看一下题目描述
考虑一个有 \(n\) 个顶点的凸多边形,且这个多边形没有任何三个(或以上) 的对角线交于一点。
-
这句话什么意思?
当顶点为\(n\)的图形为正多边形时便有可能出现一个点是有三条线相交而构成的
-
如图
- 如图情况就有三个以上的线条交于一点
-
思路
好我们切入正题,这道题有一个十分大的坑,让人一看就觉得这是一道找规律的红题,这样想会让人思维难度直线升高()当然这也能做
-
思路一_ 正解
- 把题目简化一下就是一个点是由两条线构成的 - >
而两条线对应着4个顶点 - > 所以我们只需要求出\(n\)能有多少个由个4
个顶点构成的交点就行了
- 简而言之就是求一个 \(C_n^4\);
\(C_n^4\)计算方法:\(n*(n-1)*(n-2)*(n-3)/1*2 * 3 *4\)
-
示例代码
#include<iostream>
int main()
{
int n;scanf("%d",&n);
printf("%d",(n*(n-1)*(n-2)*(n-3))/24);
return 0;
}
-
思路二
-
我们通过一些鬼畜方法发现这道题是一个差后差后差的数列,即下图
-
代码
#include<cstdio>
long long n,a[50005];
void add();
int main()
{
scanf("%lld",&n);n-=3;
for(long long i=1;i<=n;++i) a[i]=i;
for(long long i=1;i<=n;++i)
{
a[i]+=a[i-1];
}
for(long long i=1;i<=n;++i)
{
a[i]+=a[i-1];
}
for(long long i=1;i<=n;++i)
{
a[i]+=a[i-1];
}
printf("%lld",a[n]);
return 0;
}
食用快乐~~~~~~
本文来自博客园,作者:Arthur_Douglas,转载请注明原文链接:https://www.cnblogs.com/wenzhihao2023/p/17986449