Pagini recente » Cod sursa (job #2661573) | Cod sursa (job #600172) | Cod sursa (job #2538597) | Cod sursa (job #3234107) | Cod sursa (job #495121)
Cod sursa(job #495121)
#include <cstdio>
#include <cstdlib>
#include <list>
using namespace std;
FILE *fin=fopen("oite.in","r");
FILE *fout=fopen("oite.out","w");
struct pnt {
int x,y;
pnt * next;
};
#define max 0x200000
int a[1024];
pnt * v[max];
int hash(int a)
{
return a&(max-1);
}
int main (int argc, char * const argv[]) {
int n,l;
fscanf(fin, "%d%d",&n,&l);
for (int i=0; i<n; i++)
fscanf(fin, "%d",&a[i]);
memset(v, 0, sizeof(void*)*max);
for (int i=0; i<n; i++)
for (int j=i+1; j<n; j++)
{
pnt * tmp = new pnt;
tmp->x= i;
tmp->y= j;
int hs = hash(a[i]+a[j]);
tmp->next=v[hs];
v[hs] = tmp;
}
int sum = 0;
for (int i=0; i<n; i++)
for (int j=i+1; j<n; j++)
{
for (pnt * ii = v[hash(l-a[i]-a[j])]; ii!=NULL; ii=ii->next)
{
if (j>=ii->x) continue;
if ((a[ii->x]+a[ii->y])!=(l-a[i]-a[j])) continue;
sum++;
}
}
fprintf(fout, "%d",sum);
fclose(fin);
fclose(fout);
return 0;
}