Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Borderou de evaluare (job #2914961) | Cod sursa (job #89694) | Cod sursa (job #968265)
Cod sursa(job #968265)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
#define CMAX 1025
#define MOD 666013
int HashValue, SearchValue;
struct nod {
int S;
nod *next;
};
nod *H[MOD + 3];
void add(int i, int Sum) {
nod *p = new nod;
p->S = Sum;
p->next = H[i];
H[i] = p;
}
int c, L, i, j, Csum, n;
int C[CMAX];
int ANS, c1, c2;
void Search_Hash(int X) {
for (nod *it = H[X]; it; it = it->next)
if (it->S == Csum)
++ANS;
}
int main() {
freopen("oite.in","r",stdin);
freopen("oite.out","w",stdout);
scanf("%i%i", &c, &L);
for (i = 1; i <= c; ++i)
scanf("%i", &C[i]);
for (i = 1; i <= c; ++i) {
for (j = i + 1; j <= c; ++j) {
Csum = L - C[i] - C[j];
if (Csum >= 0) {
HashValue = Csum % MOD;
Search_Hash(HashValue);
}
}
for (j = 1; j < i; ++j) {
Csum = C[i] + C[j];
HashValue = Csum % MOD;
add(HashValue, Csum);
}
}
printf("%i\n", ANS);
return 0;
}