Cod sursa(job #2580638)

Utilizator Senth30Denis-Florin Cringanu Senth30 Data 13 martie 2020 20:25:27
Problema Oite Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <bits/stdc++.h>
#define HMAX 10007

using namespace std;
const int NMAX = 1030;

int N, L, M;
int v[NMAX];
long long ans;
vector <pair <int, int> > hmap[HMAX];

void read(){
    scanf("%d%d", &N, &L);
    for(int i = 1; i <= N; i++)
        scanf("%d", &v[i]);
}

inline void Insert(int val){
    int Hash = val % HMAX;
    for(int i = 0; i < hmap[Hash].size(); i++){
        if(hmap[Hash][i].first == val){
            hmap[Hash][i].second++;
            return;
        }
    }
    hmap[Hash].push_back(make_pair(val, 1));
}

inline int Search(int val){
    int Hash = val % HMAX;
    for(int i = 0; i < hmap[Hash].size(); i++)
        if(hmap[Hash][i].first == val)
            return hmap[Hash][i].second;
    return 0;
}

int main(){

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

    read();

    for(int i = 1; i < N; i++){
        for(int j = i + 1; j <= N; j++)
            if(L - v[i] - v[j] >= 0)
                ans += Search(L - v[i] - v[j]);
        for(int j = 1; j < i; j++)
            Insert(v[i] + v[j]);
    }
    printf("%lld", ans);

    return 0;
}