Pagini recente » Cod sursa (job #2523320) | Cod sursa (job #2572498) | Cod sursa (job #686766) | Cod sursa (job #1648007) | Cod sursa (job #1773972)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
vector<pair<int, int>> CitireInput(int &numarPuncte)
{
ifstream in("trapez.in");
in>> numarPuncte;
vector<pair<int, int>> puncte(numarPuncte + 1);
for( auto &punct : puncte )
{
in>> punct.first>> punct.second;
}
in.close();
return puncte;
}
vector<double> CalcularePanta(vector<pair<int, int>> puncte, int numarPuncte,
int &dimensiuneVectorPanta)
{
vector<double> panta(numarPuncte * numarPuncte + 1);
for( int i = 0 ;i < numarPuncte - 1; ++i )
{
for( int j = i + 1; j < numarPuncte; ++j )
{
panta[dimensiuneVectorPanta++] = (double) (puncte[i].first - puncte[j].first) /
(puncte[i].second - puncte[j].second);
}
}
return panta;
}
int CalculeazaNumarulTrapezelor(vector<double> panta, int dimensiuneVectorPanta)
{
int solutie = 0;
int nr = 0;
for( int i = 1; i <= dimensiuneVectorPanta; ++i )
{
panta[i] != panta[i-1] ? solutie += (nr * (nr-1) / 2), nr = 1 : ++nr;
}
return solutie;
}
int main()
{
int numarPuncte;
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;
}