Cod sursa(job #2496626)

Utilizator Vlad_AnicaAnica-Popa Vlad-Ioan Vlad_Anica Data 21 noiembrie 2019 11:01:11
Problema Numarare triunghiuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream fin ("nrtri.in");
ofstream fout ("nrtri.out");
int freq[30001], v[800];

int main()
{

    int i,j,n,nr,mj,dr,st,maxx=0,pos=0;
    fin >> n;
    for(i=0;i<n;i++)
    {
        fin >> v[i];
        freq[v[i]]++;
        if(v[i]>maxx)
            maxx=v[i];

    }
    j=0;
    for(i=1;i<=maxx;i++)
    {
        if(freq[i]>0)
        {
            while(freq[i]>0)
            {
                v[j]=freq[i];
                j++;
                freq[i]--;
            }
        }
    }
    mj=2;
    for(i=0;i<n;i++)
    {
        if(i>0)
            pos+=(mj-j)*(mj+1-j)/2;

        for(j=i+1;j<n;j++)
        {
            nr=v[i]+v[j];
            st=mj;
            dr=n;
            mj=(st+dr)/2;
            while(v[mj]!=nr && st!=dr)
            {
                if(nr>v[mj])
                {
                    st=mj;
                    mj=(dr+st)/2;
                }
                else
                {
                    if(nr<v[mj])
                    {
                        dr=mj;
                        mj=(dr+st)/2;
                    }
                }
            }
            pos+=(mj-j)*(mj+1-j)/2;
        }
    }
    fout << pos;
}