Pagini recente » Cod sursa (job #1542492) | Cod sursa (job #139826) | Cod sursa (job #142473) | Cod sursa (job #781698) | Cod sursa (job #850065)
Cod sursa(job #850065)
#include <iostream>
#include <fstream>
#include <vector>
#include <tr1/unordered_map>
using namespace std;
ifstream in ("oite.in");
ofstream out ("oite.out");
const int MOD = 666013;
int V[1030];
tr1 :: unordered_map < int, vector < pair <int, int> > > M;
vector < pair < int, int > > :: iterator it;
vector < pair <int, int> > Hash[MOD];
int main ()
{
int N, S, i, j, Ans = 0, now, x;
in >> N >> S;
for (i = 1; i <= N; i ++)
in >> V[i];
for (i = 1; i <= N; i ++)
for (j = i + 1; j <= N; j ++)
//M[ V[i] + V[j] ].push_back (make_pair (i, j));
Hash[ (V[i] + V[j]) % MOD ].push_back (make_pair (i, j));
for (i = 1; i <= N; i ++)
for (j = i + 1; j <= N; j ++){
now = S - V[i] - V[j];
/*if (M[now].size ())
for (it = M[now].begin (); it != M[now].end (); ++ it)
if ((it -> first) > j)
Ans ++;*/
x = now % MOD;
if (Hash[x].size ())
for (it = Hash[x].begin (); it != Hash[x].end (); ++ it)
if ((it -> first) > j)
Ans ++;
//if (now + V[it -> first] + V[it -> second] == S && (it -> first) > j)
// Ans ++;
}
out << Ans;
return 0;
}