Cod sursa(job #7265)

Utilizator kaesarioDumi Loghin kaesario Data 21 ianuarie 2007 13:16:13
Problema Patrate 3 Scor 0
Compilator c Status done
Runda preONI 2007, Runda 1, Clasa a 9-a si gimnaziu Marime 1.37 kb
#include <stdio.h>
#include <math.h>
#define MAX 1000

int inter(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4)
{ float a1, a2, a3, a4, b1, b2, b3, b4;
  float p1, p2;
  if (x1<x2) a1=x1, a2=x2; else a1=x2, a2=x1;
  if (y1<y2) b1=y1, b2=y2; else b1=y2, b2=y1;
  if (x3<x4) a3=x3, a4=x4; else a3=x4, a4=x3;
  if (y3<y4) b3=y3, b4=y4; else b3=y4, b4=y3;
  
  if (a1<=a4 && a3<=a2 && b1<=b4 && b3<=b2)
  { p1=(x3-x1)*(y2-y1)-(x2-x1)*(y3-y1);
    p2=(x4-x1)*(y2-y1)-(x2-x1)*(y4-y1);
    if ((p1<=0&&p2>=0)||(p1>=0&&p2<=0)) return 1;
  }
  else return 0;
}
float lung(float x1, float y1, float x2, float y2)
{
 	  return sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
}
int main()
{
 	int n, i, j, k, l, pt;
 	float x[MAX], y[MAX];
	FILE *f=fopen("patrate3.in", "rt");
	fscanf(f, "%i", &n);
	for (i=0; i<n; i++)
		fscanf(f, "%f %f", x+i, y+i);
	fclose(f);
	pt=0;
	for (i=0; i<n; i++)
	 for (j=i+1; j<n; j++)
	  for (k=0; k<n-1; k++)
	   for (l=k+1; l<n; l++)
	    if (i!=j && i!=k && i!=l && j!=k && j!=l && k!=l)
	     if (inter(x[i], y[i], x[j], y[j], x[k], y[k], x[l], y[l]))
          if (lung(x[i], y[i], x[j], y[j])-lung(x[k], y[k], x[l], y[l])<=0.0001)
           if ((x[j]-x[i])*(x[l]-x[k])-(y[i]-y[j])*(y[l]-y[k])<=0.0001) pt++;
           
	f=fopen("patrate3.out", "wt");
	fprintf(f, "%i\n", pt);
	fclose(f); 	 
	return 0; 	
}