Cod sursa(job #343775)

Utilizator Alexa_ioana_14Antoche Ioana Alexandra Alexa_ioana_14 Data 27 august 2009 12:16:59
Problema Trapez Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include<cstdio>
#define N 1024
#define M 500501
struct trapez{long long x,y;}v[N],p[M];
short int n;
long long num=0,dr=0,c,c1,par=0;
bool b[M];void citire()
{
	freopen("trapez.in","r",stdin);
	freopen("trapez.out","w",stdout);
	scanf("%hd",&n);
	for (short int i=1; i<=n; ++i)
		scanf("%lld%lld",&v[i].x,&v[i].y);
}
void gasesc()
{
	for (int i=1; i<=n; ++i)
		for (int j=i+1; j<=n; ++j)
			if (v[i].x!=v[j].x&&v[i].y!=v[j].y)
			{
				p[++num].y=v[i].y-v[j].y;
				p[num].x=v[i].x-v[j].x;
			}
			else
				if (v[i].x!=v[j].x)
				++dr;
				else
					if (v[i].y!=v[j].y)
						++par;
	n=num;
	num=1;
	dr=dr*(dr-1)/2+par*(par-1)/2;
	int i=1;
	for ( i=1;i<n; ++i)
	{
		num=1;
		for (int j=i+1; j<=n; ++j)
		{
			if (!b[j])
			{
				c=p[i].x/p[j].x;
				if (c*p[j].x!=p[i].x)
				{
					c=p[j].x/p[i].x;
					if (c*p[i].x!=p[j].x)
						continue;
					else
					{
						c1=p[j].y/p[i].y;
						if (c*p[i].y==p[j].y&&c1==c)
						{
							++num;
							b[j]=true;
						}
					}
				}
				else
				{
					c1=p[i].y/p[j].y;
					if (c1*p[j].y==p[i].y&&c==c1)
					{
						++num;
						b[j]=true;
					}
				}
			}
		}
		dr+=(num-1)*num/2;
	}
	printf("%lld",dr);
}
int main()
{
	citire();
	gasesc();
	return 0;
}