Cod sursa(job #1780117)

Utilizator antracodRadu Teodor antracod Data 15 octombrie 2016 20:56:46
Problema Oite Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

const int NMAX = 1029;
const int prim = 10007;
int v[NMAX];
vector <pair<int,int> > H[prim+1];

void AddToHash(int x)
{
    int i;
    int k=x%prim;
    for(i=0;i<H[k].size();i++)
    {
        if(H[k][i].first==x)
            {
                H[k][i].second++;
                return;
            }
    }
    H[k].push_back(make_pair(x,1));
}

int SearchHash(int x)
{
    int i;
    int k=x%prim;
    for(i=0;i<H[k].size();i++)
    {
        if(H[k][i].first==x)
            {
                return H[k][i].second;
            }
    }
    return 0;
}


int main()
{
    long long int sol=0;
    int oi,lana;
    in>>oi>>lana;
    for(int i=1;i<=oi;i++)
    {
        in>>v[i];
    }

    for(int i=1;i<oi;i++)
    {
        for(int j=i+1;j<=oi;j++)
        {
            if(lana-v[i]-v[i]>=0)
                sol+=SearchHash(lana-v[i]-v[j]);
        }
        for(int j=0;j<i;j++)
        {
            AddToHash(v[i]+v[j]);
        }
    }
    out<<sol;

}