Pagini recente » Cod sursa (job #1091368) | Profil HutuMatei | Cod sursa (job #461141) | Profil DeniCuntan | Cod sursa (job #273742)
Cod sursa(job #273742)
#include <stdio.h>
#define lg_max 600013
using namespace std;
struct nod
{
int inf,p1,p2,viz;
nod *next;
nod ()
{
viz=0;
}
}*sir[lg_max];
int rezultat,si[lg_max],n,L;
void baga(int S,int poz1,int poz2)
{
nod *q=new nod;
q->inf=S;
q->p1=poz1;
q->p2=poz2;
q->next=sir[S%lg_max];
sir[S%lg_max]=q;
}
void cauta(int S,int poz1,int poz2)
{
S=S%lg_max;
for(nod *q=sir[S];q;q=q->next)
if (q->inf==S)
{
if ((q->p1!=poz1 && q->p2!=poz2) && (q->p2!=poz1 && q->p1!=poz2))
{
rezultat++;
q->viz++;
}
}
}
void solve()
{
int unde=lg_max;
if (unde>L)
unde=L;
for (int i=0;i<=unde;i++)
{
for (nod *q=sir[i];q;q=q->next)
{
rezultat-=q->viz;
cauta(L-q->inf,q->p1,q->p2);
}
}
}
void citire ()
{
scanf ("%d %d",&n,&L);
for (int i=0;i<n;i++)
{
scanf("%d",&si[i]);
sir[i]=NULL;
}
for (int i=0;i<n;i++)
for (int j=i+1;j<n;j++)
baga(si[i]+si[j],i,j);
}
int main ()
{
freopen ("oite.in","r",stdin);
freopen ("oite.out","w",stdout);
citire();
solve();
printf("%d\n",rezultat/3);
return 0;
}