Pagini recente » Cod sursa (job #2544114) | Cod sursa (job #2613591) | Cod sursa (job #2131567) | Cod sursa (job #1636954) | Cod sursa (job #1512795)
#include <cstdio>
#include <vector>
using namespace std;
const int MOD = 7919;
const int NMAX = 1100;
int N, S;
vector< pair<int, int> > H[MOD];
unsigned int v[NMAX];
unsigned int f (unsigned int a) {
return a % MOD;
}
int findH (unsigned int Q) {
unsigned int r = f (Q);
for (int i = 0; i < H[r].size (); i++) {
if (H[r][i].first == Q) {
return i;
}
}
return -1;
}
void insertH (int Q) {
int pos = findH (Q);
if (pos != -1) {
H[ f(Q) ][pos].second ++;
}
else {
H[ f(Q) ].push_back ( make_pair (Q, 1) );
}
}
int main () {
freopen ("oite.in", "r", stdin);
freopen ("oite.out", "w", stdout);
scanf ("%u%u", &N, &S);
for (int i = 1; i <= N; i++) {
scanf ("%u", &v[i]);
}
int ANS = 0;
for (int i = 1; i < N; i++) {
for (int j = i + 1; j <= N; j++) {
int s = v[i] + v[j], pos = findH (S - s);
if (S - s > 0 && pos != -1) {
ANS += H[ f(S - s) ][pos].second;
}
}
for (int j = 1; j < i; j++) {
insertH (v[i] + v[j]);
}
}
printf ("%d\n", ANS);
return 0;
}