Pagini recente » Cod sursa (job #2087035) | Cod sursa (job #755607) | Cod sursa (job #1384994) | Cod sursa (job #375672) | Cod sursa (job #798995)
Cod sursa(job #798995)
#include<stdio.h>
#include<fstream>
#include<vector>
using namespace std;
#define MOD 666013
#define MAXN 1030
typedef struct
{
unsigned int val, nr;
} element;
vector < element > v[ MOD ];
vector < element > h[ MOD ];
int n, i, j;
int a[ MAXN ];
long long int L, s1, s2, res, tmp;
inline void insert_value_v(unsigned int x)
{
int l = x % MOD;
int ii;
element A;
for(ii = 0; ii < v[l].size(); ++ii)
if(v[l][ii].val == x)
{
++v[l][ii].nr;
return;
}
A.val = x;
A.nr = 1;
v[l].push_back(A);
}
inline int search_value_v(unsigned int x)
{
int l = x % MOD;
int ii;
for(ii = 0; ii < v[l].size(); ++ii)
if(v[l][ii].val == x)
return v[l][ii].nr;
return 0;
}
inline void delete_value_v(unsigned int x)
{
int l = x % MOD;
int ii;
for(ii = 0; ii < v[l].size(); ++ii)
if(v[l][ii].val == x)
{
--v[l][ii].nr;
return;
}
}
int main()
{
ifstream f("oite.in");
f >> n >> L;
for(i = 1; i <= n; ++i)
f >> a[i];
f.close();
FILE *g = fopen("oite.out", "w");
for(i = 1; i < n; ++i)
{
for(j = i + 1; j <= n; ++j)
{
if(L - a[i] - a[j] >= 0)
res += search_value_v(L - a[i] - a[j]);
}
for(j = 1; j < i; ++j)
insert_value_v(a[i] + a[j]);
}
fprintf(g, "%lld\n", res);
fclose(g);
return 0;
}