Cod sursa(job #2466150)

Utilizator StanCatalinStanCatalin StanCatalin Data 1 octombrie 2019 17:09:25
Problema Oite Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

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

const int dim = 1030;
const int MOD = 100021;

vector < pair<int,int> > h[MOD];
int n,a[dim],suma;
long long int ans = 0;

void Adauga(int val,int cate)
{
    int k = val%MOD;
    vector < pair<int,int> >:: iterator it;
    for (it = h[k].begin(); it != h[k].end(); it++)
    {
        if ((*it).first == val)
        {
            (*it).second++;
            return ;
        }
    }
    h[k].push_back(make_pair(val,cate));
}

int CNT(int val)
{
    int k = val%MOD;
    vector < pair<int,int> >:: iterator it;
    for (it = h[k].begin(); it != h[k].end(); it++)
    {
        if ((*it).first == val)
        {
            return (*it).second;
        }
    }
    return 0;
}

int main()
{
    in >> n >> suma;
    for (int i=1; i<=n; i++)
    {
        in >> a[i];
    }
    for (int i=1; i<=n; i++)
    {
        for (int j=i+1; j<=n; j++)
        {
            if (a[i] + a[j] <= suma)
            {
                ans += CNT(suma-a[i]-a[j]);
            }
        }
        for (int j=i-1; j>=1; j--)
        {
            Adauga(a[i]+a[j],1);
        }
    }
    out << ans;
    return 0;
}