51nod 1451 合法三角形

来源:互联网 发布:论文数据库 编辑:程序博客网 时间:2024/05/18 11:13

由于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;elseres=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);}}


原创粉丝点击