Cod sursa(job #810046)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 9 noiembrie 2012 15:12:23
Problema Numarare triunghiuri Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <stdio.h>
int v[800],n;
void sortare(int n){
    int pmin,aux,i,j;
    for(i=0;i<n;i++){
        pmin=i;
        for(j=i+1;j<n;j++)
            if(v[j]<v[pmin])
                pmin=j;
        if(pmin!=i){
            aux=v[i];
            v[i]=v[pmin];
            v[pmin]=aux;
        }
    }
}

int caut(int x)
{
    //caut binar cel mai mare i cu proprietatea ca v[i]<=x
    int i=0,pas;
    pas=1<<9;
    while(pas!=0){
        if((i+pas<n)&&(v[i+pas]<=x))
            i+=pas;
        pas/=2;
    }
    return i;
}

int main(){
    int i,j,pas,k,s;
    FILE *fin,*fout;
    fin=fopen("nrtri.in","r");
    fout=fopen("nrtri.out","w");
    fscanf(fin,"%d",&n);
    if(n==1||n==2)
        fprintf(fout,"0");
    else {
        for(i=0;i<n;i++)
            fscanf(fin,"%d",&v[i]);
        sortare(n);
        s=0;
        for(i=0;i<n-2;i++){
            for(j=i+1;j<n-1;j++){
                k = caut(v[i]+v[j]);
                if(k>j) s+=k-j;
            }
        }
        fprintf(fout,"%d",s);
    }
    return 0;
}