Pagini recente » Cod sursa (job #2831834) | Cod sursa (job #2877583) | Cod sursa (job #1168720) | Cod sursa (job #896018) | Cod sursa (job #1460771)
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#define MOD 666013
#define list (key % MOD)
#define foreach(G) for(decltype(G.begin()) it = (G).begin(); it != (G).end(); ++it)
using namespace std;
struct node{
int i, j, s;
} ins;
vector <node> Hash[MOD];
int N, L, ans, A[1050];
int find(int i, int j){
if (i == j) return 0;
int key = L - A[i] - A[j], f = 0;
if (key < 0) return 0;
foreach(Hash[key])
if (it->s == key && it->i != i && it->i != j && it->j != i && it->j != j) ++f;
return f;
}
void add(int i, int j){
int key = A[i] + A[j];
ins.i = i, ins.j = j, ins.s = key;
Hash[list].push_back(ins);
}
int main(){
freopen("oite.in", "r", stdin);
freopen("oite.out", "w", stdout);
scanf("%d %d", &N, &L);
for (int i = 0; i < N; ++i)
scanf("%d", &A[i]);
for (int i = 0; i < N; ++i)
for (int j = i + 1; j < N; ++j)
add(i, j);
for (int i = 0; i < N; ++i)
for (int j = i + 1; j < N; ++j)
ans += find(i, j);
printf("%d", ans / 6);
return 0;
}