Pagini recente » Cod sursa (job #2284761) | Cod sursa (job #2306790) | Cod sursa (job #679750) | Cod sursa (job #1666631) | Cod sursa (job #2217005)
#include <iostream>
#include <vector>
#include <stdio.h>
#define MASK 666013
using namespace std;
int v[1024];
vector<pair<int, int>> sums[MASK + 1];
int main() {
freopen("oite.in", "r", stdin);
freopen("oite.out", "w", stdout);
int n, sum;
cin >> n >> sum;
for (int i = 0; i < n; i++)
cin >> v[i];
for (int i = 0; i < n; i++) {
for (int k = i + 1; k < n; k++) {
int s = v[i] + v[k];
s = s%MASK;
sums[s].push_back(make_pair(i, k));
}
}
int cnt = 0;
for (int i = 0; i < n; i++) {
for (int k = i + 1; k < n; k++) {
int s = v[i] + v[k];
//if (s > sum / 2) //Skip some unnecessary steps
//continue;
if (s >= sum)
continue;
int desiredSum = sum - s;
vector<pair<int, int>>::iterator it = sums[desiredSum%MASK].begin();
while (it != sums[desiredSum%MASK].end()) {
if (it->first != i && it->second != i && it->first != k && it->second != k) {
if (v[it->first]+ v[it->second] == desiredSum) //Sanity Check
cnt++;
}
it++;
}
}
}
cout << cnt / 6;
}