问题 A: Triangles
时间限制: 1 Sec 内存限制: 128 MB提交: 46 解决: 14
题目描述
已知一个圆的圆周被N个点分成了N段等长圆弧,求任意取三个点,组成锐角三角形的个数。
输入
多组数据,每组数据一个N(N <= 1000000)
输出
对于每组数据,输出不同锐角三角形的个数。
样例输入
3
4
5
样输出
1
0
5
思路:找规律的题。。选一个点所在的线为直径,在直径上方的三角形为钝角或直角三角形。。。分奇偶,奇数的要减一,可以由图分割看出,用总三角形数减去钝角或直角三角形数即可得出结果。。。递推得到公式:C 3/n-C 2/(n/2)*n (偶数) C 3/n-C 2/((n-1)/2)*n (奇数)
下面附上代码:
#include<cstdio> typedef long long ll; int main() { ll N; while(~scanf("%lld",&N)) { ll sum=0; if(N%2==0) { sum=N*(N-1)*(N-2)/6-(N/2)*(N/2-1)/2*N; } else { ll ans=N-1; sum=N*(N-1)*(N-2)/6-(ans/2)*(ans/2-1)/2*N; } printf("%lld\n",sum); } return 0; }