P7900 [COCI2006-2007#2] SJECIŠTA_题解

[COCI2006-2007#2] SJECIŠTA_题解

rt

  • 我们来看一下题目描述

考虑一个有 \(n\) 个顶点的凸多边形,且这个多边形没有任何三个(或以上) 的对角线交于一点。

  • 这句话什么意思?

当顶点为\(n\)的图形为正多边形时便有可能出现一个点是有三条线相交而构成的

  • 如图

  • 如图情况就有三个以上的线条交于一点
  • 思路

好我们切入正题,这道题有一个十分大的坑,让人一看就觉得这是一道找规律的红题,这样想会让人思维难度直线升高(当然这也能做)

  • 思路一_ 正解

  1. 把题目简化一下就是一个点是由两条线构成的 - >
    而两条线对应着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;
} 

食用快乐~~~~~~

posted @ 2024-01-25 10:14  Arthur_Douglas  阅读(9)  评论(0编辑  收藏  举报