Pagini recente » Cod sursa (job #646077) | Cod sursa (job #1174402) | Cod sursa (job #127704) | Cod sursa (job #2531557) | Cod sursa (job #1770325)
#include <bits/stdc++.h>
#define maxN (1<<10)+5
#define MOD 666013
using namespace std;
int n,l,i,j,sol,v[maxN];
vector<pair<int,int> >Hash[MOD];
void hash_insert(int val)
{
int key=val%MOD;
for(vector<pair<int,int> >::iterator it=Hash[key].begin();it!=Hash[key].end();it++)
if(it->first == val)
{
it->second++;
return;
}
Hash[key].push_back(make_pair(val,1));
}
int hash_count(int val)
{
int key=val%MOD;
for(vector<pair<int,int> >::iterator it=Hash[key].begin();it!=Hash[key].end();it++)
if(it->first == val)
return it->second;
return 0;
}
void hash_erase(int val)
{
int key=val%MOD;
for(vector<pair<int,int> >::iterator it=Hash[key].begin();it!=Hash[key].end();it++)
if(it->first == val)
{
Hash[key].erase(it);
return;
}
}
int main()
{
freopen("oite.in","r",stdin);
freopen("oite.out","w",stdout);
scanf("%d %d",&n,&l);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
for(i=1;i<=n;i++)
{
for(j=i+1;j<=n;j++)
if(l-v[i]-v[j]>0)
sol+=hash_count(l-v[i]-v[j]);
for(j=1;j<i;j++)
hash_insert(v[i]+v[j]);
}
printf("%d",sol);
return 0;
}