Pagini recente » Profil florinhaja | Cod sursa (job #2684525) | Cod sursa (job #2469868) | Cod sursa (job #1265812) | Cod sursa (job #2008337)
#include <stdio.h>
#include <vector>
using namespace std;
#define MAXN 1024
#define MOD 10007
#define pb push_back
typedef long long llong;
int N, C, L, A[MAXN];
vector<int> H[MOD], Nr[MOD];
llong res;
void insert(int val)
{
int i, key = val%MOD;
for(i = (int)(H[key].size())-1; i >= 0; i--)
if(H[key][i] == val)
{
Nr[key][i]++;
return ;
}
H[key].pb(val), Nr[key].pb(1);
}
int query(int val)
{
int i, key = val%MOD;
for(i = (int)(H[key].size())-1; i >= 0; i--)
if( H[key][i] == val )
return Nr[key][i];
return 0;
}
void solve(void)
{
int i, j, k;
for(i = N-1; i >= 0; i--)
{
for(j = i-1; j >= 0; j--)
if( (k = L-A[i]-A[j]) >= 0 )
res += (llong)query(k);
for(j = i+1; j < N; j++)
if( (k = A[i]+A[j]) <= L )
insert(k);
}
}
void read_data(void)
{
int i, j;
scanf("%d %d\n", &C, &L), N = C;
for(i = 0; i < C; i++)
scanf("%d ", &A[i]);
}
void write_data(void)
{
printf("%lld\n", res);
}
int main(void)
{
freopen("oite.in", "rt", stdin);
freopen("oite.out", "wt", stdout);
// int start, end;
// start = clock();
read_data();
solve();
write_data();
// end = clock();
// fprintf(stderr, "%lf\n", (double)(end-start)/CLK_TCK);
return 0;
}