题意:中文题

思路:显然如果要形成一个交点则需要两条线段,对应圆上四个点,则生成交点的数量就是C(n,4)然后加上n即可

Trick:long long会爆...long double也会爆...坑死不少人了...



#include <cstdio>
#include <queue>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <map>
#include <string>
#include <set>
#include <ctime>
#include <cmath>
#include <cctype>
using namespace std;
#define maxn 100000+1000
#define LL long long
int cas=1,T;
unsigned long long c[maxn];


/*unsigned long long com(int n, int r)
{
 // LL c[r+1];
  int i,j;
  for(i=0;i<=r;i++) c[r] = 1LL;
  for(i=1;i<=n-r;i++)
    for(j=1;j<=r;j++)
      c[j]+=c[j-1]; 
  return c[r]; 
}*/
unsigned long long com(int n,int r)
{
	c[0]=1;
	for (int i = 1;i<=n;i++)
		c[i]=c[i-1]*(n-i+1)/i;
	return c[r];
}
int main()
{
	//freopen("in","r",stdin);
	scanf("%d",&T);
	while (T--)
	{
		int n;
		scanf("%d",&n);
        if (n>=4)
		{
            printf("%I64d\n",com(n,4)+n);
		}
		else if (n==2)
		{
            printf("2\n");
		}
		else if (n==3)
		{
			printf("3\n");
		}
		memset(c,0,sizeof(c));
	}
	//printf("time=%.3lf",(double)clock()/CLOCKS_PER_SEC);
	return 0;
}




KK's Point

 



 






 




问题描述



我们可爱的KK遇到了一道数学难题:他在一个圆上点下了互不重合的N\left(2\leq N\leq {10}^{5} \right)N(2≤N≤105)个点,现在他要将这NN个点两两相连(圆内没有三条线交于一个点的情况),KK想知道图形中一共有多少个交点(包括边界上的点)。



输入描述



第一行一个数T\left( 1\leq T\leq 10\right)T(1≤T≤10),表示数据组数。
接着T行,每行一个整数N\left(2\leq N\leq {10}^{5} \right)N(2≤N≤105),表示圆上的点数。



输出描述



对于每一个数据输出一个整数,表示交点数。



输入样例



2 3 4



输出样例



3 5