Pagini recente » Cod sursa (job #2848110) | Cod sursa (job #1531013) | Cod sursa (job #2961769) | Cod sursa (job #235555) | Cod sursa (job #1226740)
#include <cstdio>
#include <vector>
#define Nmax 1100
#define MOD 10021
using namespace std;
int N,a[Nmax];
struct el
{
int val,ap;
};
vector <el> H[MOD],H1[MOD];
inline void AddHash(int x)
{
int key=x%MOD;
vector <el>::iterator it;
for(it=H[key].begin();it!=H[key].end();++it)
if(it->val==x)
{
++it->ap;
return;
}
el w;
w.val=x; w.ap=1;
H[key].push_back(w);
}
inline void AHash(int x)
{
int key=x%MOD;
vector <el>::iterator it;
for(it=H1[key].begin();it!=H1[key].end();++it)
if(it->val==x)
{
++it->ap;
return;
}
el w;
w.val=x; w.ap=1;
H1[key].push_back(w);
}
inline int SearchHash(int x)
{
int key=x%MOD;
vector <el>::iterator it;
for(it=H[key].begin();it!=H[key].end();++it)
if(it->val==x)
return it->ap;
return 0;
}
inline int SHash(int x)
{
int key=x%MOD;
vector <el>::iterator it;
for(it=H1[key].begin();it!=H1[key].end();++it)
if(it->val==x)
return it->ap;
return 0;
}
int main()
{
int L,i,j,aux;
long long sol=0;
freopen ("oite.in","r",stdin);
freopen ("oite.out","w",stdout);
scanf("%d%d", &N,&L);
for(i=1;i<=N;++i)
{
scanf("%d", &a[i]);
AHash(a[i]);
}
for(i=1;i<N;++i)
for(j=i+1;j<=N;++j)
AddHash(a[i]+a[j]);
for(i=1;i<N;++i)
for(j=i+1;j<=N;++j)
{
aux=L-a[i]-a[j];
sol+=SearchHash(aux);
sol-=SHash(aux-a[j]);
if(2*a[j]==aux) ++sol;
sol-=SHash(aux-a[i]);
if(2*a[i]==aux) ++sol;
if(a[i]+a[j]==aux) ++sol;
}
printf("%lld\n", sol/6);
return 0;
}