Pagini recente » Cod sursa (job #1157451) | Cod sursa (job #1785670) | Cod sursa (job #2059276) | Cod sursa (job #2716992) | Cod sursa (job #2618178)
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream fin("trapez.in");
ofstream fout("trapez.out");
struct{
long long x,y;
}pct[1011];
int main()
{
unsigned N, rez=0, combinari=1;
vector <long double> panta;
fin>>N;
for(unsigned i=0; i<N; i++)//citire
fin>>pct[i].x>>pct[i].y;
for(unsigned i=0; i<N; i++)
for(unsigned j=i+1; j<N; j++){
if(pct[i].y != pct[j].y) //daca punctele sunt diferite pe Oy le consider panta
panta.push_back((long double)(pct[j].y-pct[i].y)/(pct[j].x-pct[i].x));
else
panta.push_back(2e9+7); //dummy value
}
sort(panta.begin(),panta.end());
for(unsigned i=0; i<panta.size(); i++){
if(panta[i] == panta[i-1]) //cat timp am aceeasi panta, maresc numarul de "combinari" de paralele cu care o sa formez trapezele
combinari++;
else{
rez += combinari*(combinari-1)/2; //cand combinari e 1 adaug 0
combinari = 1;
}
}
panta.clear();
fout<<rez;
return 0;
}