Pagini recente » Cod sursa (job #2431790) | Cod sursa (job #1687672) | Cod sursa (job #984226) | Cod sursa (job #2751161) | Cod sursa (job #1663191)
#include <vector>
#include <fstream>
#include <iostream>
using namespace std;
const int MOD = 4999;
vector <pair <int, int> > M[MOD]; /// first = suma, second = frecventa
int v[1030], n, s, sol;
int query(int x) {
int key = x % MOD;
for (vector <pair <int, int> > :: iterator it = M[key].begin(); it != M[key].end(); ++it)
if (it -> first == x)
return it -> second;
return 0;
}
void add(int x) {
int key = x % MOD;
for (vector <pair <int, int> > :: iterator it = M[key].begin(); it != M[key].end(); ++it)
if (it -> first == x) {
it -> second ++;
return;
}
M[key].push_back(make_pair(x, 1));
}
int main() {
ifstream fin("oite.in");
ofstream fout("oite.out");
fin >> n >> s;
for (int i = 0; i < n; ++i)
fin >> v[i];
add(v[0] + v[1]);
for (int i = 2; i < n - 1; ++i) {
for (int j = i + 1; j < n; ++j)
if(s - v[i] - v[j] > 0)
sol += query(s - v[i] - v[j]);
for (int j = 0; j < i; ++j)
add(v[i] + v[j]);
}
fout << sol;
fout.close();
fin.close();
return 0;
}