Cod sursa(job #2496644)

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

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

int main()
{

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

    }
    j=1;
    for(i=1;i<=maxx;i++)
    {
        if(freq[i]>0)
        {
            while(freq[i]>0)
            {
                v[j]=freq[i];
                j++;
                freq[i]--;
            }
        }
    }

    for(i=1;i<=n-1;i++)
    {
        mj=i+2;

        for(j=i+1;j<=n-1;j++)
        {

            nr=v[i]+v[j];
            st=mj;
            dr=n-1;
            mj=(st+dr)/2;
            while(v[mj]!=nr && st<=dr)
            {

                if(nr>v[mj])
                {
                    st=mj+1;
                    mj=(dr+st)/2;
                }
                else
                {
                    if(nr<v[mj])
                    {
                        dr=mj-1;
                        mj=(dr+st)/2;
                    }
                }
            }

                if(mj>j)
                    pos+=(mj-j+1)*(mj-j)/2;
                if(nr>=v[dr])
                    pos+=(dr-j+1)*(dr-j)/2;

        }

    }
    fout << pos;
}