Pagini recente » Cod sursa (job #823612) | Cod sursa (job #2782094) | Cod sursa (job #800019) | Cod sursa (job #3166) | Cod sursa (job #1765820)
#include <stdio.h>
#define MOD 702113
#define MAX_N 524801
int v[1024],hash[MOD],n;
struct nod
{
int x,y,val,next;
}list[MAX_N];
void myqsort(int start,int stop)
{
int i,j,pivot,aux;
i=start;j=stop;
pivot=v[(i+j)/2];
while(i<=j)
{
while(v[i]<pivot)
i++;
while(v[j]>pivot)
j--;
if(i<=j)
{
aux=v[i];
v[i]=v[j];
v[j]=aux;
i++;j--;
}
}
if(j>start)
myqsort(start,j);
if(i<stop)
myqsort(i,stop);
}
inline void add(int x,int i,int j)
{
list[++n].val=x;
list[n].x=i;list[n].y=j;
list[n].next=hash[x%MOD];
hash[x%MOD]=n;
}
inline long long verif(int x,int j)
{
long long co=0;
int p=hash[x%MOD];
while(p)
{
if(list[p].val==x && list[p].x>j && list[p].y>j)
co++;
p=list[p].next;
}
return co;
}
int main()
{
FILE *fin,*fout;
fin=fopen("oite.in","r");
fout=fopen("oite.out","w");
int c,l,i,j;
long long co=0;
fscanf(fin,"%d%d",&c,&l);
for(i=0;i<c;i++)
fscanf(fin,"%d",&v[i]);
myqsort(0,c-1);
for(i=0;i<c-1;i++)
for(j=i+1;j<c;j++)
add(v[i]+v[j],i,j);
for(i=0;i<c-1;i++)
for(j=i+1;j<c;j++)
if(v[i]+v[j]<l)
co+=verif(l-v[i]-v[j],j);
fprintf(fout,"%lld",co);
fclose(fin);
fclose(fout);
return 0;
}