Cod sursa(job #799447)

Utilizator vlad96Vlad Zuga vlad96 Data 18 octombrie 2012 23:42:52
Problema Oite Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#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;

}