Cod sursa(job #358185)

Utilizator nicolaetitus12Nicolae Titus nicolaetitus12 Data 22 octombrie 2009 02:55:55
Problema Numarare triunghiuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <stdlib.h>
#include <stdio.h>
#define N 810
int sir[N];
int comp(const void *a,const void *b)
{return (*(int*)a- *(int*)b);
}


int main()
{FILE *fin,*fout;
 int i,j,l,k,n,sum,dif,s,y,st,dr,mid;
 fin=fopen("nrtri.in","r");
 fout=fopen("nrtri.out","w");
 if(!(fin&&fout))
  return 0;
 printf("\n");
 fscanf(fin,"%d",&n);
 for (i=0;i<n;i++)
 {fscanf(fin,"%d",&sir[i]);
 }
 qsort(sir,n,sizeof(int),comp);
 for (i=0,s=0;i<n;i++)
 {for (j=i+1;j<n;j++)
  {y=0;
   sum=sir[i]+sir[j];
   dif=abs(sir[i]-sir[j]);

   st=0;dr=n-1;
   while(st<dr)
   {mid=st+(dr-st)/2;
    if(sir[mid]<dif)
    {st=mid+1;
    }
    else
    {dr=mid;
    }
   }
   while(st>0&&sir[st-1]==sir[st])
   {st--;
   }

   l=st;
   ///
   st=0;dr=n-1;
   while(st<dr)
   {mid=st+(dr-st+1)/2;
    if(sir[mid]>sum)
    {dr=mid-1;
    }
    else
    {st=mid;
    }
   }
   while(dr<n-1&&sir[dr+1]==sir[dr])
   {dr++;
   }

   k=dr;
//////
   

//   for (l=0;l<n&&dif>sir[l];l++)
 //  {}
   
 //  for (k=n-1;k>=0&&sum<sir[k];k--){}
   
   if(l<=i&&i<=k)y--;
   if(l<=j&&j<=k)y--;
   y+=k-l+1;
   printf("%d %d %d %d %d\n",i,j,l,k,y);
   s+=y;
  }
 }
 printf("%d\n",s/3);
 fclose(fout);
 
 
 return 0;
}