Cod sursa(job #69284)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 2 iulie 2007 15:33:12
Problema Trapez Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.88 kb
#include<fstream.h>
#include<math.h>
long n,a[1001],b[1001];
void citire(){
ifstream fin("trapez.in");
fin>>n;
for (int i=0;i<n;i++)
   fin>>a[i]>>b[i];
fin.close();
}
void sortare (){
short ok=0;
while (ok==0){
ok=1;
n--;
for (int i=0;i<n;i++)
  if (a[i]>a[i+1]){
     long aux=a[i];
     a[i]=a[i+1];
     a[i+1]=aux;
     aux=b[i];
     b[i]=b[i+1];
     b[i+1]=aux;
     ok=1;}
  else
    if (a[i]==b[i])
      if (b[i]>b[i+1]){
	 long aux=b[i];
	 b[i]=b[i+1];
	 b[i+1]=aux;
	 aux=a[i];
	 a[i]=a[i+1];
	 a[i+1]=aux;
	 ok=1;}
}
}

int caz1 (int h,int u){
long nr=0;
for (int i=h;i<n-1;i++)
  for (int j=i+1;j<n;j++){
       if (a[i]==a[j]){
	   nr++;
	   if (a[h]-a[u]==a[j]-a[i])
	      nr++;}
	 if (b[i]==b[h]&&b[j]==b[u])
	   nr++;
	 if (b[j]==b[h]&&b[i]==b[u])
	   nr++;
	   }
return nr;
}

int caz2(int e,int r){
long nr=0;
for (int i=e;i<n-1;i++)
  for (int j=i+1;j<n;j++){
       if (b[i]==b[j]){
	  nr++;
       if (b[r]-b[e]==b[j]-b[i])
	  nr++;
	  if (a[i]==a[e]&&a[j]==a[r])
	   nr++;
	 if (a[j]==a[e]&&a[i]==a[r])
	   nr++;
	   }
	  }
return nr;
}


double latura(int x1,int y1,int x,int y){
double w=0;
w+=(x1-x);
w*=(x1-x);
w+=(y1-y)*(y1-y);
double f=sqrt(w);
return f;
}
int caz3(int e,int r){
int nr=0;
double L,L1,x,y;
L=latura(a[e],b[e],a[r],b[r]);
x=L/(a[e]-a[r]);
y=L/(b[e]-b[r]);
for (int i=e;i<n-1;i++)
  for (int j=i+1;j<n;j++){
      L1=latura(a[i],b[i],a[j],b[j]);
       if (x==L1/(a[j]-a[i]))
	  if (y==L1/(b[j]-b[i]))
	     nr++;}
return nr;
}

int numarare(){
long nr=0;
for (int i=0;i<n-3;i++)
  for (int j=i+1;j<n-2;j++){
     if (a[i]==a[j])
	nr+=caz1(j,i);
     else
       if (b[i]==b[j])
	 nr+=caz2(j,i);
       else
	nr+=caz3(j,i);
	}
return nr;
 }
int main(){
citire();
sortare();
ofstream fout("trapez.out");
fout<<numarare();
fout<<"\n";
fout.close();
return 0;
}