Cod sursa(job #1992836)

Utilizator Dobricean_IoanDobricean Ionut Dobricean_Ioan Data 21 iunie 2017 16:01:26
Problema Trapez Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 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 (b.y - a.y)* (S.b.x - S.a.x)
			  - (S.b.x - a.x) * (S.b.y - S.a.y)< 0;
	}
};
segm S[10000000];

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

bool Vertical(punct A, punct B)
{
    return fabs(A.x - B.x) < eps;
}
double Panta(punct A, punct B)
{ if(Vertical(A,B))
		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;
}