Pagini recente » Cod sursa (job #1852647) | Cod sursa (job #782203) | Cod sursa (job #2278061) | Cod sursa (job #1308898) | Cod sursa (job #1226730)
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=1<<20,prim=41;
int v[1100],h[maxn],vaz[maxn],n,i,j,l,sol,k;
int inc(int i)
{
if(++i==maxn) i=0;
return i;
}
void hash_insert(int x)
{
//int i=((x%maxn)*prim)%maxn;
int i=x%maxn;
while(h[i]>-1 && h[i]!=x) i=inc(i);
h[i]=x;
vaz[i]++;
}
int hash_find(int x)
{
//int i=((x%maxn)*prim)%maxn;
int i=x%maxn;
while(h[i]!=-1 && h[i]!=x) i=inc(i);
if(h[i]==x) return i;
else return -1;
}
int main()
{
freopen("oite.in", "r", stdin);
freopen("oite.out", "w", stdout);
scanf("%d%d",&n,&l);
memset(h,-1,sizeof h);
for(i=1;i<=n;i++) scanf("%d",&v[i]);
for(i=3;i<n;i++)
{
for(j=1;j<i-1;j++) hash_insert(v[j]+v[i-1]);
for(j=i+1;j<=n;j++)
if(l-v[i]-v[j]>=0)
{
k=hash_find(l-v[i]-v[j]);
if(k>-1) sol+=vaz[k];
}
}
printf("%d",sol);
return 0;
}