Pagini recente » Monitorul de evaluare | Cod sursa (job #595846) | Cod sursa (job #1539087) | Clasament pregatire_oji_ms1 | Cod sursa (job #1773963)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
struct Punct
{
int x;
int y;
};
vector<Punct> CitireInput(int &numarPuncte)
{
ifstream in("trapez.in");
in>> numarPuncte;
vector<Punct> puncte(numarPuncte + 1);
for( int i = 1; i <= numarPuncte; ++i )
{
in>> puncte[i].x>> puncte[i].y;
}
in.close();
return puncte;
}
vector<double> CalcularePanta(vector<Punct> puncte, int numarPuncte,
int &dimensiuneVectorPanta)
{
vector<double> panta(numarPuncte * numarPuncte + 1);
for( int i = 1 ;i < numarPuncte - 1; ++i )
{
for( int j = i + 1; j <= numarPuncte; ++j )
{
panta[++dimensiuneVectorPanta] = (double) (puncte[i].x - puncte[j].x) /
(puncte[i].y - puncte[j].y);
}
}
return panta;
}
int CalculeazaNumarulTrapezelor(vector<double> panta, int dimensiuneVectorPanta)
{
int solutie = 0;
int nr = 0;
for( int i = 1; i <= dimensiuneVectorPanta + 1; ++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;
}