Pagini recente » Cod sursa (job #40604) | Cod sursa (job #393839) | Cod sursa (job #663260) | Cod sursa (job #1042093) | Cod sursa (job #1460790)
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#define MOD 16384
#define list (key % MOD)
#define foreach(G) for(decltype(G.begin()) it = (G).begin(); it != (G).end(); ++it)
using namespace std;
vector <pair<int, int>> Hash[MOD];
int N, L, ans, A[1024];
inline void find(int key){
if (key < 0) return;
foreach(Hash[list])
if (it->first == key){
ans += it->second;
return;
}
}
inline void insert(int key){
foreach(Hash[list])
if (it->first == key){
++it->second;
return;
}
Hash[list].push_back(make_pair(key, 1));
}
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)
find(L - A[i] - A[j]);
for (int j = 0; j < i; ++j)
insert(A[i] + A[j]);
}
printf("%d", ans);
return 0;
}