Pagini recente » Cod sursa (job #1941792) | Arhiva de probleme | Cod sursa (job #2046918) | butoaie | Cod sursa (job #3260331)
#include <fstream>
#include <map>
#include <cmath>
using namespace std;
ifstream fcin("triang.in");
ofstream fout("triang.out");
int n,rez;
double dif;
map <double, int> mp;
struct pct
{
double x;
double y;
};
pct v[2001];
struct latura
{
double dist;
int nr;
};
latura lat[2000*2000];
inline double f(pct a, pct b)
{
double dist1=abs(a.x-b.x);
double dist2=abs(a.y-b.y);
double val=dist1*dist1+dist2*dist2;
val=round(val*1000)/1000;
return val;
}
int main()
{
dif=0.001;
fcin>>n;
for(int i=1; i<=n; i++)
{
fcin>>v[i].x>>v[i].y;
v[i].x=round(v[i].x*1000)/1000;
v[i].y=round(v[i].y*1000)/1000;
}
for(int i=1; i<n; i++)
{
for(int j=i+1; j<=n; j++)
{
double lung=f(v[i],v[j]);
mp[lung]++;
}
}
int vf=0;
for(map <double, int>:: iterator it=mp.begin(); it!=mp.end(); it++)
{
lat[++vf]={it->first, it->second};
}
int nr=lat[1].nr;
for(int i=2; i<=vf; i++)
{
//fout<<lat[i].dist<<" ";
if(lat[i].dist==lat[i-1].dist || lat[i].dist==lat[i-1].dist-dif || lat[i].dist==lat[i-1].dist+dif)
{
nr=nr+lat[i].nr;
}
else
{
rez=rez+nr*(nr-1)*(nr-2)/6;
nr=lat[i].nr;
}
if(i==vf)
{
rez=rez+nr*(nr-1)*(nr-2)/6;
nr=lat[i].nr;
}
}
fout<<rez;
return 0;
}