Cod sursa(job #1842223)

Utilizator rares1012Rares Cautis rares1012 Data 6 ianuarie 2017 17:48:15
Problema Numarare triunghiuri Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <stdio.h>
#include <stdlib.h>

int v[800];

int compare(const void*a,const void*b)
{
    return (*(int*)a-*(int*)b);
}

int main()
{
    int n,i,s=0,a,b,p,k;
    FILE*fi,*fo;
    fi=fopen("nrtri.in","r");
    fo=fopen("nrtri.out","w");
    fscanf(fi,"%d",&n);
    for(i=0;i<n;i++)
        fscanf(fi,"%d",&v[i]);
    qsort(v,n,sizeof(int),compare);
    k=0;
    while(k<n-2)
    {
        a=k+1;
        b=n-1;
        while(a<b)
        {
            if(v[k]+v[a]<v[b]){
            p=1<<9;
            while(p>0)
            {
                if(b-p>a && v[k]+v[a]<v[b-p])
                    b-=p;
                p/=2;
            }
            b--;
            }
            s=s+b-a;
            a++;
        }
        k++;
    }
    fprintf(fo,"%d",s);
    fclose(fi);
    fclose(fo);
    return 0;
}