Cod sursa(job #930867)

Utilizator paul_gabryelPaul Buda paul_gabryel Data 27 martie 2013 21:02:24
Problema Oite Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb

#include <fstream>
#include <vector>

using namespace std;

ifstream in ("oite.in");
ofstream out ("oite.out");

const int key = 666013;

int V[1025],n,L,SOL;
vector<pair<int,int> > H[key];

void READ ()
{

    in>>n>>L;

    for( int i=1 ; i <= n ; ++i )
        in>>V[i];

}

void INSERT ( int S )
{

    int nod=S%key;

    for( vector<pair<int,int> >::iterator it=H[nod].begin() ; it < H[nod].end() ; ++it )
        if( it->first == S )
        {

            ++it->second;
            return;

        }

    H[nod].push_back(make_pair(S,1));

}

int FIND ( int S )
{

    if( S < 0 )
        return 0;

    int nod=S%key;

    for( vector<pair<int,int> >::iterator it=H[nod].begin() ; it < H[nod].end() ; ++it )
        if( it->first == S )
            return it->second;

    return 0;

}

void SOLVE ()
{

    for( int i=1 ; i < n ; ++i )
    {

        for( int j=i-1 ; j ; --j )
            INSERT( V[i]+V[j] );

        for( int j=i+2 ; j <= n ; ++j )
            SOL+=FIND(L-V[i+1]-V[j]);

    }

}

void PRINT ()
{

    out<<SOL;

}

int main ()
{

    READ ();
    SOLVE ();
    PRINT ();

    return 0;

}