Pagini recente » Cod sursa (job #3192894) | Cod sursa (job #875426) | Cod sursa (job #1622615) | Cod sursa (job #338610) | Cod sursa (job #1764240)
#include <stdio.h>
#include <algorithm>
#define mod 666013
#define lim 1025
using namespace std;
int v[lim],next[lim*lim],lista[mod],k;
struct sume{int s,x,y;};
sume sum[lim*lim];
void adauga(int val,int a,int b){
int ind=val%mod;
k++;
sum[k].s=val;
sum[k].x=a;
sum[k].y=b;
next[k]=lista[ind];
lista[ind]=k;
}
long long verif(int val,int a,int b){
int ind;
long long rasp=0;
if(val<=0)
return 0;
ind=lista[val%mod];
while(ind!=0){
if(sum[ind].s==val&&sum[ind].x>b&&sum[ind].y>b)
rasp++;
ind=next[ind];
}
return rasp;
}
int main(){
FILE *fin,*fout;
fin=fopen("oite.in","r");
fout=fopen("oite.out","w");
int i,j,n,l;
long long rasp=0;
fscanf(fin,"%d%d",&n,&l);
for(i=1;i<=n;i++)
fscanf(fin,"%d",&v[i]);
sort(v+1,v+n+1);
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
adauga(v[i]+v[j],i,j);
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
rasp=rasp+verif(l-(v[i]+v[j]),i,j);
fprintf(fout,"%lld",rasp);
fclose(fin);
fclose(fout);
return 0;
}