Pagini recente » Cod sursa (job #2039468) | Cod sursa (job #2788085) | Cod sursa (job #331376) | Cod sursa (job #82578) | Cod sursa (job #2073732)
#include <fstream>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
ifstream fin("trapez.in");
ofstream fout("trapez.out");
const double eps=1.0e-14;
const double INF=2.0e9;
struct POINT
{
int x, y;
};
vector<POINT>puncte;
vector <double>pante;
bool vertical(POINT p1, POINT p2)
{
return fabs(p1.x-p2.x)<eps;
}
double panta(POINT p1, POINT p2)
{
if(vertical(p1, p2))
return INF;
return ((1.0*p2.y-p1.y)/(p2.x-p1.x));
}
int main()
{
int i, n, l=1, j;
long long tr=0;
double m;
POINT p;
fin>>n;
for(i=1;i<=n;i++)
{
fin>>p.x>>p.y;
puncte.push_back(p);
}
for(i=0;i<puncte.size()-1;i++)
{
for(j=i+1;j<puncte.size();j++)
{
m=panta(puncte[i], puncte[j]);
pante.push_back(m);
}
}
sort(pante.begin(), pante.end());
m=pante[0];
for(i=1;i<pante.size();i++)
{
if(fabs(pante[i]-m)<eps)
l=l+1;
else
{
m=pante[i];
tr=tr+(((l-1)*l)/2);
l=1;
}
}
tr=tr+(((l-1)*l)/2);
fout<<tr<<"\n";
return 0;
}