Pagini recente » Cod sursa (job #999090) | Cod sursa (job #562482) | Cod sursa (job #1046728) | Cod sursa (job #901985) | Cod sursa (job #2082339)
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <limits.h>
using namespace std;
ifstream in("trapez.in");
ofstream out("trapez.out");
struct punct{
int x,y;
};
double grupuri[510000];
punct puncte[1010];
int n, nr_0 ;
int k=1;
double e=0.000000001;
int compara (const void * a, const void * b)
{
if (*(double*)a > *(double*)b) return 1;
else if (*(double*)a < *(double*)b) return -1;
else return 0;
}
int cmmdc(int a,int b){
if(b==0)
return a;
else return cmmdc(b,a%b);
}
double pantificare(punct x,punct y){
int var1=y.y-x.y;
int var2=y.x-x.x;
if(var2==0){
nr_0++;
return 0;
}
return (double)var1/var2;
}
void generare_pante(){
int i,j;
for(i=1;i<n;++i)
for(j=i+1;j<=n;++j)
{
int aux;
int cond;
do{ cond=nr_0;
aux=pantificare(puncte[i],puncte[j]);
if(nr_0!=cond){
if(j<n)j++;
else if(j==n&&i<n-1){
i++;
j=i+1;
}
else if(j==n&&i==n-1)break;
}
}while(cond!=nr_0);
if(i==n-1&&cond!=nr_0)break;
grupuri[k]=aux;k++;}
k--;
}
int combinare_2(int n){
return (n*(n-1))/2;
}
bool egalitate(double a,double b){
if(a-b<e||a==b)return true;
return false;
}
int main()
{
in>>n;
for(int i=1;i<=n;i++){
in>>puncte[i].x>>puncte[i].y;
}
generare_pante();
qsort(grupuri+1,k-1,sizeof(double),compara);
int it;
int nr_trapeze=0;
double primul=grupuri[1];
int nr=1;
for(it=2;it<=k;it++){
if( (grupuri[it]>=primul&&grupuri[it]-primul<=e)||(primul>=grupuri[it]&&primul-grupuri[it]<=e) ){
nr_trapeze+=nr;
nr++;
}
else{
primul=grupuri[k];
nr=1;
}
}
//for(int s=1;s<=k;s++)cout<<grupuri[s]<<'\n';
out<<nr_trapeze;
return 0;
}