问题 A: Triangles
时间限制: 1 Sec 内存限制: 128 MB
题目描述
已知一个圆的圆周被N个点分成了N段等长圆弧,求任意取三个点,组成锐角三角形的个数。
输入
多组数据,每组数据一个N(N <= 1000000)
输出
对于每组数据,输出不同锐角三角形的个数。
样例输入
3
4
5
样例输出
1
0
5
解法一:计算锐角三角形的个数,可以用总的三角形的个数减去直角三角形和钝角三角形的个数即可。
C(n,3)-C(n/2,2)2n/2
全部不同三角形个数为 C(n,3)
每个点能构成的不同钝角或者三角形个数为 C(n/2,2),每个点拉一条直径,钝角或者直角三角形的其他两点只能在直角一侧,直径一侧所有点除所取点任意选两个的不同方案数,另一半同理。
全部构成的不同钝角或者三角形个数为 C(n/2,2)2n/2
n个点,每个三角形可以被构成两次。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
typedef long long ll;
ll n,k,ans,sum,tot;
int main()
{
while(scanf("%lld",&n)!=EOF)
{
sum=n*(n-1)*(n-2)/6;
k=n/2;
tot=k*(k-1)/2*2*n/2;
ans=sum-tot;
cout << ans << endl;