Pagini recente » Cod sursa (job #2259432) | Cod sursa (job #2219832) | Cod sursa (job #1005305) | Istoria paginii runda/bkariglijk/clasament | Cod sursa (job #273749)
Cod sursa(job #273749)
#include <stdio.h>
#define lg_max 600013
using namespace std;
struct nod
{
long inf,p1,p2,viz;
nod *next;
nod ()
{
viz=0;
}
}*sir[lg_max];
long rezultat,si[lg_max],n,L;
void baga(long S,long poz1,long 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(long S,long poz1,long poz2)
{
for(nod *q=sir[S%lg_max];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()
{
long unde=lg_max-1;
if (unde>L)
unde=L;
for (long 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 ("%ld %ld",&n,&L);
for (long i=0;i<n;i++)
{
scanf("%ld",&si[i]);
sir[i]=NULL;
}
for (long i=0;i<n;i++)
for (long 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("%ld\n",rezultat/3);
return 0;
}