Pagini recente » Cod sursa (job #1155209) | Cod sursa (job #597760) | Cod sursa (job #513358) | Cod sursa (job #1358234) | Cod sursa (job #1902654)
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
FILE*f=fopen("triang.in","r");
FILE*g=fopen("triang.out","w");
int n,nr;
struct pct
{
double x,y;
}v[1510];
int cmp(pct a,pct b)
{
if (a.x<b.x||(fabs(a.x-b.x)<0.001&&a.y<b.y)) return 1;
else return 0;
}
void cauta(double x, double y)
{
int p=1,u=n,m;
while (p<u)
{
m=(p+u)/2;
if ((fabs(v[m].x-x)<0.001)&&(fabs(v[m].y-y)<0.001)) {nr++;return;}
else
if (v[m].x>x||(fabs(v[m].x-x)<0.001&&v[m].y>y)) u=m;
else p=m+1;
}
}
int main()
{
int i,j;
double d,e,aux,a,b,c;
fscanf(f,"%d",&n);
for (i=1;i<=n;i++)
{
fscanf(f,"%lf%lf",&v[i].x,&v[i].y);
}
sort(v+1,v+n+1,cmp);
for (i=1;i<n;i++)
for (j=i+1;j<=n;j++)
{
d=(v[i].x-v[j].x)*(v[i].x-v[j].x)+(v[i].y-v[j].y)*(v[i].y-v[j].y);
e=(v[i].x+v[j].x)/2-(v[i].y+v[j].y)/2;
c=v[j].x*v[j].x+v[j].y*v[j].y-d;
b=-2*v[j].x*e-2*v[j].x;
a=1+e*e;
d=b*b-4*a*c;
if (d>0){
aux=(-b+sqrt(d))/2/a;
cauta(aux,aux*e);
aux=(-b-sqrt(d))/2/a;
cauta(aux,aux*e);
}
else if (d<0.001) {aux=-b/2/a;cauta(aux,aux*e);}
}
fprintf(g,"%d",nr/3);
fclose(f);
fclose(g);
return 0;
}