Description
我们可爱的K遇到了一道数学难题:他在一个圆上点下了互不重合的N(2≤N≤10^5)个点,现在他要将这N个点两两相连(圆内没有三条线交于一个点的情况),K想知道图形中一共有多少个交点(包括边界上的点)
Input
第一行一个数T(1≤T≤10),表示数据组数。
接着T行,每行一个整数N(2≤N≤10^5 ),表示圆上的点数。
Output
对于每一个数据输出一个整数,表示交点数
Sample Input
2
3
4
Sample Output
3
5
Solution
除圆上的n个点之外,圆内每个交点都是由圆上四个点所连成的两条交叉的线段形成,故总点数是C(n,4)+n
Code
#include<cstdio>
#include<iostream>
using namespace std;
typedef unsigned long long ull;
int main()
{
int T,n;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
if(n<4)printf("%d\n",n);
else
{
ull ans=1ull*(n-3)*(n-2)/2*(n-1)/3*n/4;
printf("%I64d\n",n+ans);
}
}
return 0;
}