Pagini recente » Borderou de evaluare (job #3227029) | Borderou de evaluare (job #2223811) | Borderou de evaluare (job #2924364) | Borderou de evaluare (job #3255551) | Cod sursa (job #1506647)
#include <cstdio>
using namespace std;
const int mod=2000000,prim=103;
int v[1030];
int dsp[mod+1],nr[mod+1];
int hashh(int a)
{
int x=(1LL*a*prim)%mod;
while(1)
{
if(dsp[x]==a) {nr[x]++;break;}
if(dsp[x]==0) {dsp[x]=a;nr[x]=1;break;}
else x++;
if(x==mod) x=0;
}
}
int main()
{
freopen("oite.in","r",stdin);
freopen("oite.out","w",stdout);
int c,l,t,a;
long long sol=0;
scanf("%d%d",&c,&l);
for(int i=1;i<=c;i++)
scanf("%d",&v[i]);
for(int i=2;i<c;i++)
{
for(int j=1;j<i;j++) hashh(v[i]+v[j]);
for(int j=i+2;j<=c;j++)
{
t=l-v[j]-v[i+1];
if(t>0)
{
a=(1LL*t*prim)%mod;
while(1)
{
if(dsp[a]==0) break;
if(dsp[a]==t) {sol+=nr[a];break;}
else a++;
if(a==mod) a=0;
}
}
}
}
printf("%lld",sol);
return 0;
}