Pagini recente » Cod sursa (job #261371) | Cod sursa (job #1275485) | Cod sursa (job #1297659) | Cod sursa (job #1256325) | Cod sursa (job #2223045)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin ("oite.in");
ofstream fout ("oite.out");
const int Dim = 1500,mod = 50003;
int A[Dim],n,l,sol;
vector < pair < int , int > > H[mod];
void Insert(int x);
int Find(int x);
int main() {
fin >> n >> l;
for ( int i = 1; i <= n; ++i)
fin >> A[i];
for ( int i = 2; i <= n; ++i) {
for ( int j = i + 1; j <= n; ++j) {
if ( A[i] + A[j] > l)
continue;
sol += Find(l-A[i]-A[j]);
}
for ( int j = i - 1; j >= 1; --j)
Insert(A[i]+A[j]);
}
fout << sol;
}
int Find(int x) {
int i = x % mod;
for ( const auto j : H[i] )
if ( j.first == x)
return j.second;
return 0;
}
void Insert(int x){
int i = x % mod;
for ( auto & j : H[i])
if ( j.first == x) {
++j.second;
return;
}
H[i].push_back({x,1});
}