Cod sursa(job #2205179)

Utilizator osiaccrCristian Osiac osiaccr Data 18 mai 2018 10:08:40
Problema Oite Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>
#include <vector>
#define MODO 500000
#define DEF 1050

using namespace std;

ifstream fin ("oite.in");
ofstream fout ("oite.out");

unsigned int n, l, V[DEF], sol;

vector < pair < unsigned int, int > > M[MODO];

void insert_Hash (unsigned int x) {
    for (int i = 0; i < M[x % MODO].size (); ++ i) {
        if (M[x % MODO][i].first == x) {
            M[x % MODO][i].second ++;
            return;
        }
    }

    M[x % MODO].push_back ({x, 1});
}

int search_Hash (unsigned int x) {
    for (int i = 0; i < M[x % MODO].size (); ++ i) {
        if (M[x % MODO][i].first == x) {
            return M[x % MODO][i].second;
        }
    }

    return 0;
}

int main () {
    fin >> n >> l;

    for (int i = 1; i <= n; ++ i) {
        fin >> V[i];
    }

    for (int i = 2; i <= n; ++ i) {
        for (int j = i + 1; j <= n; ++ j) {
            if (V[i] + V[j] > l)
                continue;
            int temp = search_Hash (l - V[i] - V[j]);
            if (temp)
                sol += temp;
        }

        for (int j = i - 1; j >= 1; -- j) {
            insert_Hash (V[i] + V[j]);
        }
    }

    fout << sol;

    return 0;
}