Pagini recente » Cod sursa (job #1611579) | Cod sursa (job #134978) | Cod sursa (job #730212) | Cod sursa (job #2349416) | Cod sursa (job #75917)
Cod sursa(job #75917)
#include <cstdio>
#define maxn 1024
#define maxp 634621
FILE *in = fopen("oite.in", "r"), *out = fopen("oite.out", "w");
struct hash
{
int i, j;
hash *next;
};
int n;
int L;
int a[maxn];
hash *h[maxp] = {NULL};
void hadd(int p, int q)
{
int t = (a[p] + a[q]) % maxp;
hash *b = new hash;
b->next = h[t];
b->i = p;
b->j = q;
h[t] = b;
}
int hget(int p, int q)
{
int s = 0;
if ( L - (a[p] + a[q]) < 0 )
return 0;
hash *t = h[(L - (a[p] + a[q])) % maxp];
while ( t )
{
if ( t->i > q )
++s;
t = t->next;
}
return s;
}
int main()
{
fscanf(in, "%d %d", &n, &L);
for ( int i = 0; i < n; ++i )
fscanf(in, "%d", &a[i]);
for ( int i = 0; i < n; ++i )
for ( int j = i+1; j < n; ++j )
hadd(i, j);
int cnt = 0;
for ( int i = 0; i < n; ++i )
for ( int j = i+1; j < n; ++j )
cnt += hget(i, j);
fprintf(out, "%d\n", cnt);
return 0;
}