Cod sursa(job #766176)

Utilizator bratualexBratu Alexandru bratualex Data 10 iulie 2012 15:30:57
Problema Numarare triunghiuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <fstream>

using namespace std;
ifstream fin ("nrtri.in");
ofstream fout ("nrtri.out");
void sortare (int ,int );
void merge(int,int,int,int);
//int verif ( int [],int,int,int);
int v[800],aux[800];
int main()
{
    int n,j,k,i,nr=0,gata=0;
    fin>>n;
    for(i=0;i<n;i++)
        fin>>v[i];
    sortare(0,n-1);
    for(i=0;i<n-2;i++)
        for(j=i+1;j<n-1;j++)
        {
            gata=0;
            for(k=j+1;k<n&&!gata;k++)
            {
                gata=1;
                if ( ( v[i]+v[j]>=v[k]  )&& (v[i]+v[k]>=v[j]  )&&( v[j]+v[k]>=v[i]   ) )
                {
                    gata=0;
                    //fout<<v[i]<<"\n"<<v[j]<<"\n";//<<v[k]<<"\n";
                    nr++;
                }
            }
        }
    fout<<nr;
    fin.close();
    fout.close();
    return 0;
}
void sortare (int a,int b)
{
    int mijl;
    mijl=a+(b-a)/2;
    if(a<b)
    {
        sortare(a,mijl);
        sortare(mijl+1,b);
        merge(a,mijl,mijl+1,b);
    }
}
void merge (int a,int na,int b,int nb)
{
    int i=0,j,k,l;
    k=nb;
    l=a;
    while (a<=na&&b<=nb)
    {
        if (v[a]<=v[b])
            aux[i++]=v[a++];
        else
            aux[i++]=v[b++];
    }
    while (a<=na)
    {
        aux[i++]=v[a++];

    }
    while (b<=nb)
    {
        aux[i++]=v[b++];
    }
    j=i;
    for(i=k;i>=l;i--)
    {
        v[i]=aux[--j];

    }
}
/*
int verif( int v[800],int i, int j ,int k)
{
    if(  ( v[i]+v[j]>=v[k]  )&& (v[i]+v[k]>=v[j]  )&&( v[j]+v[k]>=v[i]   )  )
        return 1;
    return 0;
}
*/