Pagini recente » Cod sursa (job #333589) | Cod sursa (job #140040) | Cod sursa (job #33643) | Cod sursa (job #1015730) | Cod sursa (job #940714)
Cod sursa(job #940714)
#include <stdlib.h>
#include <fstream>
#include <iostream>
#include <string>
#include <queue>
#include <stack>
#include <vector>
#include <string.h>
#include <iomanip>
#include <time.h>
#include <list>
#include <algorithm>
#include <math.h>
#include <assert.h>
using namespace std;
const string file = "oite";
const string infile = file + ".in";
const string outfile = file + ".out";
typedef unsigned int UINT;
UINT ANS;
UINT L, N;
vector<UINT> A;
const int MOD = 50101;
vector<pair<UINT, UINT> > HM[MOD + 5];
inline UINT cHash(UINT i)
{
return i % MOD;
}
int Find(int v)
{
int h = cHash(v);
for (vector<pair<UINT, UINT> > ::iterator itr = HM[h].begin();
itr != HM[h].end();
itr++)
{
if(itr->first == v)
{
return itr->second;
}
}
return 0;
}
void Add(int v)
{
int h = cHash(v);
for (vector<pair<UINT, UINT> > ::iterator itr = HM[h].begin();
itr != HM[h].end();
itr++)
{
if(itr->first == v)
{
itr->second ++;
return;
}
}
HM[h].push_back(make_pair(v, 1));
}
void citire()
{
ifstream fin(infile.c_str());
fin >> N >> L;
A.resize(N, 0);
for(UINT i = 0; i < N; i++)
{
fin >> A[i];
}
fin.close();
}
void solve()
{
for(UINT i = 0; i < N; i++)
{
for(UINT j = i + 1; j < N; j++)
{
ANS += Find(L- A[i] - A[j]);
}
for(UINT j = 0; j < i; j++)
{
Add(A[i] + A[j]);
}
}
}
void afisare()
{
ofstream fout(outfile.c_str());
fout << ANS << "\n";
fout.close();
}
int main()
{
citire();
solve();
afisare();
}