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);
}
}
#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 1451:合法三角形 枚举斜率
- 51nod-1451 合法三角形
- 51nod 1451 合法三角形(暴力,思维)
- 51nod 1451 合法三角形
- 51nod 1451 合法三角形 判斜率去重,时间复杂度O(n^2)
- 51Nod-1451-合法三角形
- 1451 合法三角形
- 51nold 1451 合法三角形【数学几何】
- 51nod 1315 合法整数集
- 51nod 1298 圆与三角形
- 51nod 1298:圆与三角形(计算几何)
- 51nod 1315 合法整数集
- 51nod 1165 整边直角三角形的数量
- 51nod_1791——合法括号字段
- Sicily 4187 合法三角形 (难得水题)
- 51Nod 1298 圆与三角形 计算几何
- 【51Nod】1315 - 合法整数集(思维)
- 51Nod-1298 圆与三角形
- 51nod 1298 圆与三角形
- [LeetCode] Valid Triangle Number 合法的三角形个数