Pagini recente » Cod sursa (job #1666808) | Cod sursa (job #552280) | Cod sursa (job #238970) | Profil Djok | Cod sursa (job #1773959)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
struct Punct
{
unsigned int x;
unsigned int y;
};
vector<Punct> CitireInput(unsigned int &numarPuncte)
{
ifstream in("trapez.in");
in>> numarPuncte;
vector<Punct> puncte(numarPuncte + 1);
for( unsigned int i = 1; i <= numarPuncte; ++i )
{
in>> puncte[i].x>> puncte[i].y;
}
in.close();
return puncte;
}
vector<double> CalcularePanta(vector<Punct> puncte, unsigned int numarPuncte,
unsigned int &dimensiuneVectorPanta)
{
vector<double> panta(numarPuncte * numarPuncte + 1);
for( unsigned int i = 1 ;i < numarPuncte - 1; ++i )
{
for( unsigned int j = i + 1; j <= numarPuncte; ++j )
{
panta[++dimensiuneVectorPanta] = (double) (puncte[i].x - puncte[j].x) /
(puncte[i].y - puncte[j].y);
}
}
return panta;
}
unsigned int CalculeazaNumarulTrapezelor(vector<double> panta, unsigned int dimensiuneVectorPanta)
{
unsigned int solutie = 0;
unsigned int nr = 0;
for( unsigned int i = 1; i <= dimensiuneVectorPanta + 1; ++i )
{
panta[i] != panta[i-1] ? solutie += (nr * (nr-1) / 2), nr = 1 : ++nr;
}
return solutie;
}
int main()
{
unsigned int numarPuncte;
unsigned int dimensiuneVectorPanta = 0;
auto puncte = CitireInput(numarPuncte);
auto panta = CalcularePanta(puncte, numarPuncte, dimensiuneVectorPanta);
sort(panta.begin(), panta.begin() + dimensiuneVectorPanta + 1);
ofstream out("trapez.out");
out<< CalculeazaNumarulTrapezelor(panta, dimensiuneVectorPanta);
out.close();
return 0;
}