Cod sursa(job #2837722)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 22 ianuarie 2022 14:05:24
Problema Oite Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <algorithm>
#include <iostream>
#include <vector>
#define MAXN 10007
#define val first
#define cnt second
using namespace std;
int C, L, v[1030];
long long Sol;
vector<pair<int, int>> H[MAXN];
void Insert(int V) {
    int S = V % MAXN;
    for (int i = 0; i < H[S].size(); i++)
        if (H[S][i].val == V) {
            H[S][i].cnt++;
            return;
        }
    H[S].push_back(make_pair(V, 1));
}

int Search(int V) {
    int S = V % MAXN;
    for (int i = 0; i < H[S].size(); i++)
        if (H[S][i].val == V)
            return H[S][i].cnt;
    return 0;
}

int main() {
    freopen("oite.in", "r", stdin);
    freopen("oite.out", "w", stdout);
    scanf("%d%d", &C, &L);
    for (int i = 1; i <= C; i++)
        scanf("%d", &v[i]);
    for (int i = 1; i < C; i++) {
        for (int j = i + 1; j <= C; ++j)
            if (L - v[i] - v[j] >= 0)
                Sol += Search(L - v[i] - v[j]);
        for (int j = 1; j < i; ++j)
            Insert(v[i] + v[j]);
    }
    printf("%lld", Sol);
    return 0;
}