题意:中文题
思路:显然如果要形成一个交点则需要两条线段,对应圆上四个点,则生成交点的数量就是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