Cod sursa(job #1939325)

Utilizator LeVladzCiuperceanu Vlad LeVladz Data 25 martie 2017 16:59:12
Problema Oite Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <fstream>
#include <vector>
#define DIM 997216

using namespace std;

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

int n,s,i,j,k,nr,ok,v[1030],x,y,sol,t;
vector < pair <int, int> > H[DIM];

int main()
{
    fin >> n >> s;
    for (i=1; i<=n; i++)
        fin >> v[i];
    H[(v[1]+v[2])%DIM].push_back (make_pair(v[1]+v[2], 1));
    for (i=3; i<n; i++)
    {
        for (j=i+1; j<=n; j++)
        {
            x = s-v[i]-v[j];
            if (x <= 0)
                continue;
            t = x%DIM;
            y = H[t].size();
            nr = 0;
            for (k=0; k<y; k++)
                if (H[t][k].first+v[i]+v[j] == s)
                {
                    sol += H[t][k].second;
                    break;
                }
        }
        for (j=i-1; j>=1; j--)
        {
            x = v[i]+v[j];
            t = x%DIM;
            y = H[t].size();
            ok = 0;
            for (k=0; k<y; k++)
                if (H[t][k].first == x)
                {
                    H[t][k].second++;
                    ok = 1;
                    break;
                }
            if (ok == 0)
                H[t].push_back (make_pair(x,1));
        }
    }
    fout << sol;
    return 0;
}