Cod sursa(job #255330)

Utilizator DraStiKDragos Oprica DraStiK Data 9 februarie 2009 10:10:01
Problema Trapez Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <algorithm>
using namespace std;
#include <stdio.h>
#define DIM 1000005
#define INF 1LL<<60
struct punct {int x,y;} v[1001];
double a[DIM];
int n,m;
long long nrt=1;
void read ()
{
	int i;
	scanf ("%d",&n);
	for (i=1; i<=n; ++i)
		scanf ("%d%d",&v[i].x,&v[i].y);
}
void panta ()
{
	int i,j,x,y;
	for (i=1; i<n; ++i)
		for (j=i+1; j<=n; ++j)
		{
			y=v[j].y-v[i].y;
			x=v[j].x-v[i].x;
			if (x==0)
				a[++m]=INF;
			else
				a[++m]=(double)y/x;
		}
}
void solve ()
{
    int i,nr;
	for (i=1; i<m; )
	    if (a[i]==a[i+1])
	    {
            nr=1;
			while (a[i]==a[i+1] && i<m)
            {
                ++i;
                ++nr;
            }
            if (nr%2)
			    nrt*=((nr-1)/2)*nr;
			else
			    nrt*=(nr/2)*(nr-1);
        }          
        else
            ++i; 
		printf ("%lld",nrt);
}
int main ()
{
    freopen ("trapez.in","r",stdin);
    freopen ("trapez.out","w",stdout);    
    read ();
    panta ();
    sort (a+1,a+m+1);
    solve ();
    return 0;
}