Cod sursa(job #324201)

Utilizator andreioneaAndrei Onea andreionea Data 14 iunie 2009 21:23:05
Problema Numarare triunghiuri Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.61 kb
#include<stdio.h>
#include<string.h>
#define init(x) memset(x,0,sizeof(x))
int v[801],vv[801],i,j,n,b[30001],pmax[30001],max=30000;
long long p=0;
int main()
{FILE *f=fopen("nrtri.in","r"),*g=fopen("nrtri.out","w");
 init(pmax);
 init(b);
 fscanf(f,"%d",&n);
 for(i=1;i<=n;++i)
  {fscanf(f,"%d",&v[i]);++b[v[i]];
  }
 for(i=1;i<=max;++i) 
 { if(b[i])
	for(j=1;j<=b[i];++j) vv[++p]=i;
  pmax[i]=p;
}	
 p=0;
 for(i=1;i<n-1;++i)
  for(j=i+1;j<n;++j)
	if((vv[i]+vv[j])<=max)
        p+=(long long)(pmax[vv[i]+vv[j]]-j);
	else p+=(long long)(pmax[max]-j);
 if(p==0) p=-1;
 fprintf(g,"%lld",p);
 fclose(f);
 fclose(g);
 return 0;
}