Cod sursa(job #2223045)

Utilizator Dobricean_IoanDobricean Ionut Dobricean_Ioan Data 18 iulie 2018 23:00:17
Problema Oite Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#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});
}