Cod sursa(job #990278)

Utilizator DaNutZ2UuUUBB Bora Dan DaNutZ2UuU Data 27 august 2013 20:36:35
Problema Oite Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <cstdio>
#include <vector>
 
const int MAX_N(1025);
const int HASH_KEY(7001);
 
int n, l, Result;
int v [MAX_N];
 
std::vector<int> Hash [HASH_KEY];
 
inline int Key (const int X)
{
    return X % HASH_KEY;
}
 
inline void Insert (const int X)
{
    Hash[Key(X)].push_back(X);
}
 
inline int Find (const int X)
{
    int result(0);
    if (X >= 0)
        for (auto iterator(Hash[Key(X)].begin()), end(Hash[Key(X)].end()) ; iterator != end ; ++iterator)
            if (*iterator == X)
                ++result;
    return result;
}
 
inline void Read (void)
{
    std::freopen("oite.in","r",stdin);
    std::scanf("%d\n",&n);
    std::scanf("%d\n",&l);
    for (int i(1) ; i <= n ; ++i)
        std::scanf("%d\n",&v[i]);
    std::fclose(stdin);
}
 
inline void Print (void)
{
    std::freopen("oite.out","w",stdout);
    std::printf("%d\n",Result);
    std::fclose(stdout);
}
 
inline void Compute (void)
{
    int i, j;
    for (i = 1 ; i <= n ; ++i)
    {
        for (j = i + 1 ; j <= n ; ++j)
            Result += Find(l - (v[i] + v[j]));
        for (j = 1 ; j < i ; ++j)
            Insert(v[i] + v[j]);
    }
}
 
int main (void)
{
    Read();
    Compute();
    Print();
    return 0;
}