Pagini recente » Cod sursa (job #454671) | Cod sursa (job #337296) | Cod sursa (job #2353119) | Cod sursa (job #132975) | Cod sursa (job #1772015)
#include <stdio.h>
#include <algorithm>
#define MOD 654321
#define MAX 1025
int v[MAX],next[MAX*MAX],lista[MOD],p;
int sum[MAX*MAX], sumx[MAX*MAX],sumy[MAX*MAX];
void adauga(int val,int a,int b){
p++;
sum[p]=val;
sumx[p]=a;
sumy[p]=b;
next[p]=lista[val % MOD];
lista[val % MOD]=p;
}
long long cauta(int val,int a,int b){
long long rasp=0;
if(val<=0)
return 0;
int modulo =lista[val % MOD];
while(modulo != 0){
if(sum[modulo]==val&&sumx[modulo]>b&&sumy[modulo]>b)
rasp++;
modulo=next[modulo];
}
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]);
std::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 + cauta(l-(v[i]+v[j]),i,j);
fprintf(fout, "%lld",rasp);
fclose(fin);
fclose(fout);
return 0;
}