您的位置:首页 > 其它

51nod 1451 合法三角形

2017-07-11 10:10 169 查看
由于xy范围比较小,所以可以枚举斜率进行计算。

#include<bits/stdc++.h>
using namespace std;

const int MAXN=2020;
const int inf=0x3f3f3f3f;
const double eps=1e-6;
long long x[MAXN],y[MAXN];
double slope[MAXN*MAXN];

int main()
{
long long n,i,j,last,now,tmp,k,rep;
double res,dx,dy;
while(~scanf("%lld",&n))
{
for(i=1;i<=n;i++)
scanf("%lld%lld",&x[i],&y[i]);
rep=0;
for(i=1;i<=n;i++)
{
k=0;
for(j=i+1;j<=n;j++)
{
dx=x[j]-x[i];
dy=y[j]-y[i];
if(dx==0)
res=inf;
else
res=dy/dx;
slope[k++]=res;
}
sort(slope,slope+k);
last=0;
now=1;
for(;now<k;now++)
{
if(abs(slope[now]-slope[last])>eps)
{
tmp=now-last;
rep+=tmp*(tmp-1)/2;
last=now;
}
}
tmp=now-last;
rep+=tmp*(tmp-1)/2;
}
printf("%lld\n",n*(n-1)*(n-2)/6-rep);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  51nod 数学