Pagini recente » Cod sursa (job #1908315) | Cod sursa (job #925275) | Cod sursa (job #2205437) | Cod sursa (job #191117) | Cod sursa (job #2679711)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
const int NMAX = 1000;
const double INF = 9000000000.0;
pair<double, double> vec[1 + NMAX];
vector<double> pante;
double epsilon = 0.001;
bool maiMicPrimul(double a, double b)
{
return b - a > epsilon;
}
bool egal(double a, double b)
{
return b - a < epsilon && a - b < epsilon;
}
int main()
{
ifstream in("trapez.in");
ofstream out("trapez.out");
int n;
long long int pante_0 = 0;
in >> n;
for (int i = 1; i <= n; i++)
{
in >> vec[i].first >> vec[i].second;
for (int j = 1; j < i; j++)
{
if (egal(vec[j].first - vec[i].first, 0.0))
{
pante_0++;
}
else
{
pante.emplace_back((vec[j].second - 1.0 * vec[i].second) / (vec[j].first - vec[i].first));
}
}
}
sort(pante.begin(), pante.end());
long long int sol = 0;
double val = pante[0];
long long int nr = 1;
for (size_t i = 1; i < pante.size(); i++)
{
if (egal(val, pante[i]))
{
nr++;
}
else
{
sol += nr * (nr - 1) / 2;
val = pante[i];
nr = 1;
}
}
sol += nr * (nr - 1) / 2;
sol += pante_0 * (pante_0 - 1) / 2;
out << sol << '\n';
return 0;
}