51nod 1451 合法三角形
阿新 • • 發佈:2019-01-31
由於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); } }