Cod sursa(job #1992834)

Utilizator Dobricean_IoanDobricean Ionut Dobricean_Ioan Data 21 iunie 2017 15:58:24
Problema Trapez Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <algorithm>
#include <cmath>
#include <iostream>
using namespace std;
ifstream fin("trapez.in");
ofstream fout("trapez.out");
int n,nr=1,num,sol;
const double eps=0.0001;
struct punct{
int x,y;
};
punct p[1001];	

struct segm{
punct a, b;
double tan;
bool operator < (const segm& S) const
	{
		return (fabs(b.y - a.y)) * fabs((S.b.x - S.a.x)) 
			  - fabs((S.b.x - a.x)) * fabs((S.b.y - S.a.y)) < 0;
	}
};
segm S[10000000];

bool cmp(segm i,segm j)
{ return i.tan-j.tan<eps;
		
}

double Panta(punct A, punct B)
{ if(B.x==A.x)
		return -1;
    return (double)(B.y - A.y) / (B.x - A.x);
}
int combinari(int c,int k)
{
if (k==0)
return 1;
else
if (k>c)
return 0;
else
return (combinari(c-1,k)+combinari(c-1,k-1));
}
int main()
{ fin>>n;
	for(int i=1; i<=n; i++)
		fin>>p[i].x>>p[i].y;
for(int i=1; i<=n; i++)
	for(int j=i+1; j<=n; j++)
		{ 
		S[nr].a.x=p[i].x;
		S[nr].a.y=p[i].y;
		S[nr].b.x=p[j].x;
		S[nr].b.y=p[j].y;
	S[nr].tan=Panta(p[i],p[j]);	
		nr++;
		}
	nr--;
	sort(S+1,S+nr+1);	
	for(int i=1;i<=nr; i++)
	{  if(S[i].tan!=S[i-1].tan)
			{if(num>1)
					sol+=combinari(num,2);
				num=1;
			
			}
	else
		num++;
	
	}
	fout<<sol;
}