Cod sursa(job #964657)

Utilizator poptibiPop Tiberiu poptibi Data 21 iunie 2013 21:18:27
Problema Oite Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;

#define Nmax 1200
#define Mod 100021
#define PI pair<int, int>

vector<PI> Hash[Mod];
int N, L, V[Nmax];
long long Ans;

void Insert(int Val)
{
    int K = Val % Mod;
    for(vector<PI> :: iterator it = Hash[K].begin(); it != Hash[K].end(); ++ it)
        if(it -> first == Val)
        {
            it -> second ++;
            return ;
        }
    Hash[K].push_back(make_pair(Val, 1));
}

int Ask(int Val)
{
    int K = abs(Val) % Mod;
    for(vector<PI> :: iterator it = Hash[K].begin(); it != Hash[K].end(); ++ it)
        if(it -> first == Val)
            return it -> second;
    return 0;
}

int main()
{
    freopen("oite.in", "r", stdin);
    freopen("oite.out", "w", stdout);

    scanf("%i %i", &N, &L);
    for(int i = 1; i <= N; ++ i) scanf("%i", &V[i]);

    for(int i = 1; i <= N; ++ i)
    {
        for(int j = i + 1; j <= N; ++ j)
            Ans += 1LL * Ask(L - V[i] - V[j]);
        for(int j = 1; j < i; ++ j)
            Insert(V[i] + V[j]);
    }
    printf("%lld\n", Ans);
    return 0;
}