三角计数

本文介绍了一种算法,用于计算凸正2n+1边形中顶点构成的不同锐角三角形数目。通过排除钝角和直角三角形,利用组合数学原理给出了公式C(n,3) - C(n,1) * C(n/2,2)。适用于处理小于100000边数的多边形问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述
给定一个n,问在凸正2n+1边形中顶点在凸正2n+1边形上的不同的锐角三角形有多少个,多边形顶点标号为A1,A2,A3,A2n+1,两个三角形不同当且仅当顶点标号不同。

程序输入说明
多组数据,第一行输入数据组数T (1 <T< 100000),后面T行,每一行给出一个n (1<n< 100000)。

程序输出说明
共输出T行,每一行输出不同锐角三角形的个数。

程序输入样例
2
2
3
程序输出样例
5
14

思路:
求出能切割成的所有三角形个数,再减去钝角和直角三角形个数,剩下的就是题目需要的锐角三角形个数。将正n边形看作由圆上n个可将圆等分成圆弧的点连成,可分成三角形个数为C(n,3),若在圆上任取一点,即C(n,1),再从半圆上取两点,即C(n/2,2),则所得三角形必为钝角三角形或直角三角形,由此思想最终可整理成一个公式:
C(n,3)-C(n,1)*C(n/2,2)

#include <bits/stdc++.h>  //万能头文件 
using namespace std; 
int main(int argc, char** argv) {
	int t;
	cin>>t;
	long long n;
	while(t--)
	{
	    cin>>n;
	    n=2*n+1;
		long long x=(n*(n-1)*(n-2))/3/2/1-n*((n/2)*(n/2-1)/2/1);
		cout<<x<<endl;	
	} 
	return 0;
}

long long全称long long int ,超长整型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值