Pagini recente » Cod sursa (job #494633) | Cod sursa (job #1722004) | Cod sursa (job #1001944) | Cod sursa (job #1778984) | Cod sursa (job #1768929)
#include <algorithm>
#include <fstream>
#include <map>
#define MOD 666013
using namespace std;
ifstream f ("oite.in");
ofstream g ("oite.out");
int v[1500];
int n , l;
long long ans;
vector <pair <int , int> > G[MOD + 5];
int query(int val) {
int hs = val % MOD;
for (vector <pair <int , int> > :: iterator it = G[hs].begin(); it != G[hs].end(); ++it) {
if ((*it).first == val) {
return (*it).second;
}
}
return 0;
}
void insert(int val) {
int hs = val % MOD;
for (vector <pair <int , int> > :: iterator it = G[hs].begin(); it != G[hs].end(); ++it) {
if ((*it).first == val) {
++((*it).second);
return;
}
}
G[hs].push_back(make_pair(val , 1));
}
int main() {
f >> n >> l;
for (int i = 1; i <= n; ++i) {
f >> v[i];
}
sort (v + 1 , v + n + 1);
for (int i = 1; i < n; ++i) {
for (int j = i + 1; j <= n; ++j) {
if (v[i] + v[j] <= l)
ans += (long long) query(l - v[i] - v[j]);
}
for (int j = 1; j < i; ++j) {
insert(v[i] + v[j]);
}
}
g << (long long)ans;
return 0;
}