Cod sursa(job #325852)

Utilizator bugyBogdan Vlad bugy Data 22 iunie 2009 18:41:00
Problema Numarare triunghiuri Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include<stdio.h>
using namespace std;
#define dim 801
int v[dim],a[6],w[dim];


//unsigned long v[dim],w[dim];//a[dim],b[dim];   
void merge_sort(int li, int ls)      
{      
    int j,i,k,jum,m=0;      
    if(li==ls) return;      
    jum=(li+ls)/2;      
    merge_sort(li,jum);      
    merge_sort(jum+1,ls);      
    i=li;j=jum+1;k=li;      
          
    while((i<=jum)||(j<=ls))      
    {      
        if(j>ls || ( (i<=jum) && (v[i] < v[j])) )      
        {      
            w[k] = v[i];  m++;//b[k]=a[i];    
            k++;      
            i++;      
        }      
        else     
        {      
            w[k] = v[j]; m++;//b[k]=a[j];     
            k++;      
            j++;      
        }      
    }      
          
    for(i = ls; i >= li; i--)      
	{
		v[i] = w[i]; //a[i]=b[i];
	}
}   

int main()
{
FILE *f=fopen("nrtri.in","r"), *g=fopen("nrtri.out","w");

	int i,j,k,n,tri=0,ok;
	fscanf(f,"%d",&n);
	for(i=1;i<=n;i++)
		fscanf(f,"%d",&v[i]);
	merge_sort(1,n);
	for(i=1;i<=n;i++)
		for(j=i;j<=n;j++)
			if(i!=j)
				for(k=j;k<=n;k++)	
					if((j!=k)&&(i!=k))
					{
					a[1]=v[i];	a[2]=v[j];	a[3]=v[k];
					//ok=1;
					if( ( a[1] > a[2] +a[3 ] ) ||  ( a[2] > a[1] +a[3 ])  || (  a[3] > a[2] +a[1] ))
					//ok=0; 
					break;
					//if(ok==1)
					tri++;
				
					}
				
				
				
	fprintf(g,"%d\n",tri);

return 0;
}