Pagini recente » Cod sursa (job #808655) | Cod sursa (job #2813632) | Cod sursa (job #2176509) | Cod sursa (job #1768323) | Cod sursa (job #2216814)
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <map>
using namespace std;
int v[1025];
struct MapElem {
int cnt;
int e1;
int e2;
};
map<int, MapElem> mapper;
int main () {
freopen ("oite.in", "r", stdin);
freopen ("oite.out", "w", stdout);
int n, val;
scanf("%d%d", &n, &val);
for (int i = 0; i < n; i++)
scanf("%d", &v[i]);
for (int i = 0; i < n; i++) {
for (int k = i + 1; k < n; k++) {
int sum = v[i] + v[k];
mapper[sum].cnt++;
mapper[sum].e1 = i;
mapper[sum].e2 = k;
}
}
int fin = 0;
for (map<int, MapElem>::iterator i = mapper.begin(); i != mapper.end(); i++) {
int tempval = i->first;
//cout << tempval << " " << " " << mapper[val - tempval] << '\n';
if (mapper[val - tempval].cnt != 0) {
int el1 = mapper[val - tempval].e1;
int el2 = mapper[val - tempval].e2;
int e1 = i->second.e1;
int e2 = i->second.e2;
if (el1 != e1 && el1 != e2 && el2 != e1 && el2 != e2)
fin += i->second.cnt * mapper[val - tempval].cnt;
}
}
printf("%d", fin / 2);
/*sort (v, v + n);
int summin = v[0] + v[1] + v[2];
int st = 0;
int dr = n;
int last = n;
if (summin > val) { ///SANITY CHECK
cout << 0;
return 0;
}
while (st < dr - 1) { ///BINARY SEARCH THE RESIDUE
int mij = (st + dr) / 2;
if (v[mij] > val - summin) {
dr = mij;
last = dr;
} else {
st = mij;
}
}
if (v[last] > val - summin) ///CLEAN THE RESIDUE
n = last;*/
}