Pagini recente » Cod sursa (job #1450436) | Cod sursa (job #1147956) | Cod sursa (job #1655307) | Cod sursa (job #916048) | Cod sursa (job #498306)
Cod sursa(job #498306)
#include <cstdio>
#include <vector>
#include <algorithm>
#define maxn 1030
#define vit vector <pair <int, pair <int, int> > > :: iterator
#define f first
#define s second
#define mod 300053
#define maxmod 300051
using namespace std;
int C, L, A[maxn], sum;
vector <pair <int, pair <int, int> > > H[maxmod];
int main ()
{
freopen ("oite.in", "r", stdin);
freopen ("oite.out", "w", stdout);
pair <int, pair <int, int> > val;
int i, j;
scanf ("%d%d\n", &C, &L);
for (i = 1; i <= C; i++)
scanf ("%d", A + i);
sort (A + 1, A + C + 1);
for (i = 1; i < C; i++)
for (j = i + 1; j <= C; j++) {
val.f = A[i] + A[j];
val.s.f = i;
val.s.s = j;
H[(A[i] + A[j]) % mod].push_back (val);
}
for (i = 1; i < C - 1 && L - A[i] - A[i + 1] >= 0; i++) {
for (j = i + 1; j <= C; j++) {
int x = (L - A[i] - A[j]) % mod;
for (int k = 0; k < H[x].size (); k++)
if (H[x][k].f == L - A[i] - A[j] && H[x][k].s.f != i && H[x][k].s.s != j && H[x][k].s.f != j && H[x][k].s.s != i) {
if (j < min (H[x][k].s.s, H[x][k].s.f)) {
sum += 1;
// printf ("%d %d %d %d\n", i, j, H[x][k].s.f, H[x][k].s.s);
}
}
}
}
printf ("%d\n", sum);
return 0;
}