Cod sursa(job #253477)

Utilizator catalin93Catalin Ionescu catalin93 Data 5 februarie 2009 20:25:45
Problema Numarare triunghiuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 5000
int n,p,max;
int x[30100],a[600];
char s[N];
/*
void sortare()
{
	int i,sort,aux;
	sort = 0;
	while(sort==0)
	{
		sort = 1;
		for(i=1;i<=n-1;i++)
		
			if(a[i] > a[i+1])
			{
				aux = a[i];
				a[i] = a[i+1];
				a[i+1] = aux;
				sort = 0;
			}
	}
	
}
*/
int compare (const void * a, const void * b)
{
  return ( *(int*)a - *(int*)b );
}

int main()
{
	int i,j,k,nr;
	
	freopen("nrtri.in","r",stdin);
	freopen("nrtri.out","w",stdout);
	
	scanf("%d\n",&n);
	max = -1;
	for(i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		x[a[i]]++;
		if(a[i] > max)
			max = a[i];
	}
	
	for(i=1;i<=max;i++)
		if(x[i] != 0)
			while(x[i] != 0)
			{
				a[++a[0]] = i;
				x[i] --;
			}
	
	/*fgets(s,N,stdin);
	k=-1;x=0;
    for (i=0;s[i]!=NULL;i++)
        if (s[i]==' ') a[++k]=x,x=0;
            else x=x*10+s[i]-'0';
	a[++k]=x;
		*/
	//sortare();
	//qsort (a, n+1, sizeof(a[1]), compare);
	nr = 0;
	for(i=1;i<n;i++)
		for(j=i+1;j<=n;j++)
		{
			for(k=n;a[k]>a[i]+a[j];k--)
				;
			nr+=k-j;
			/*
			if(a[i] + a[j] >= a[k])
			{
				s += n - k  ;
				break;
			}
			*/
		}
	/*(for(i=1;i<=n;i++)
		printf("%d\n",a[i]);*/
	printf("%d",nr);
	return 0;
}