Cod sursa(job #1772006)

Utilizator andru47Stefanescu Andru andru47 Data 6 octombrie 2016 13:20:28
Problema Oite Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <bits/stdc++.h>
#define MOD 7919
#define NMAX 1024
using namespace std;
vector <int> Hash[MOD + 5];
long long vect,v[NMAX+5],Sol,n,lung,x;
inline void checkhash(int nr)
{
    nr = nr%MOD;
    for (auto it = Hash[nr].begin(); it != Hash[nr].end(); ++it)
        if (*it==nr)++Sol;
    return ;
}
int main()
{
    freopen("oite.in","r",stdin);
    freopen("oite.out","w",stdout);
    scanf("%lld %lld", &n,&lung);
    for (int i = 1; i<=n; ++i)
    {
        scanf("%lld", &x);
        if (x<=lung)
            v[++vect] = x%MOD;
    }
    sort(v+1,v+vect+1);
    for (int i = 1; i<=vect; ++i)
    {
        for (int j = i+1; j<=vect; ++j)
        {
            int ramas = lung - v[i]-v[j];
            if (ramas<=0)continue;
            checkhash(ramas);
        }
        for (int j = 1; j<i; ++j)
            Hash[(v[i]+v[j])%MOD].push_back((v[i]+v[j])%MOD);
    }
    printf("%lld", Sol);
    return 0;
}