Pagini recente » Borderou de evaluare (job #69439) | Cod sursa (job #695813) | Cod sursa (job #313762) | Cod sursa (job #564492) | Cod sursa (job #799447)
Cod sursa(job #799447)
#include <fstream>
#include <vector>
#define NMAx 1100
#define MOD 666013
using namespace std;
vector < pair<int,int> > Hash[MOD];
long long Sol;
int N,L,V[NMAx];
int findHash(int X) {
for(int i=0;i<Hash[X%MOD].size();i++)
if(Hash[X%MOD][i].first==X)
return i;
return -1;
}
void insertHash(int X) {
int i=findHash(X);
if(i==-1)
Hash[X%MOD].push_back(make_pair(X,1));
else
Hash[X%MOD][i].second++;
}
void Solve() {
int i,j,k;
for(i=1;i<=N;i++) {
for(j=i+1;j<=N;j++)
if(L-V[i]-V[j]>=0&&(k=findHash(L-V[i]-V[j]))!=-1)
Sol+=Hash[(L-V[i]-V[j])%MOD][k].second;
for(j=1;j<i;j++)
insertHash(V[i]+V[j]);
}
}
void Citire() {
ifstream in("oite.in");
in>>N>>L;
for(int i=1;i<=N;in>>V[i++]);
in.close();
}
void Afis() {
ofstream out("oite.out");
out<<Sol<<'\n';
out.close();
}
int main() {
Citire();
Solve();
Afis();
return 0;
}