Pagini recente » Cod sursa (job #2089594) | Cod sursa (job #139684) | Cod sursa (job #1429093) | Cod sursa (job #976115) | Cod sursa (job #2205179)
#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;
}