Cod sursa(job #3357390)

Utilizator ChillingManMihai-Tudor ChillingMan Data 9 iunie 2026 10:57:20
Problema Numarare triunghiuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
#include <ostream>

using namespace std;

ifstream fin("nrtri.in");
ofstream fout("nrtri.out");

const int NMAX1=800, NMAX2=30000;
int a[NMAX1 + 1], f[NMAX2 + 1], b[NMAX1 + 1];
int N;

int binSearch(int i, int j){
    int st=j+1, dr=N, mij, last=j;
    while (st<=dr){
        mij=(st+dr)/2;
        if (b[mij]<=b[i]+b[j]){
            st=mij+1;
            last=mij;
        }
        else if (b[mij]>b[i]+b[j]){
            dr=mij-1;
        }
    }
    return last;
}

int main()
{
    int i, j=1, sum=0;
    fin >> N;
    for (i=1;i<=N;i++){
        fin >> a[i];
        f[a[i]]++;
    }
    for (i=1;i<=NMAX2 + 1;i++){
        while(f[i]>0){
            b[j++]=i;
            f[i]--;
        }
    }
    for (i=1;i<=N-2;i++){
        for (j=i+1;j<=N;j++){
            sum=sum+binSearch(i,j)-j;
           // fout << i << " " << j << "  " << binSearch(i,j) << "\n";
        }
    }
    fout << sum;
}