Cod sursa(job #1460788)

Utilizator theprdvtheprdv theprdv Data 13 iulie 2015 22:01:33
Problema Oite Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#define MOD 666013
#define list (key % MOD)
#define foreach(G) for(decltype(G.begin()) it = (G).begin(); it != (G).end(); ++it)

using namespace std;

vector <pair<int, int>> Hash[MOD];
int N, L, ans, A[1024];

inline void find(int key){
	if (key < 0) return;
	foreach(Hash[list])
		if (it->first == key){
			ans += it->second;
			return;
		}
}

inline void insert(int key){
	foreach(Hash[list])
		if (it->first == key){
			++it->second;
			return;
		}
	Hash[list].push_back(make_pair(key, 1));
}

int main(){
	freopen("oite.in", "r", stdin);
	freopen("oite.out", "w", stdout);

	scanf("%d %d", &N, &L);
	for (int i = 0; i < N; ++i)
		scanf("%d", &A[i]);
	
	for (int i = 0; i < N; ++i){
		for (int j = i + 1; j < N; ++j)
			find(L - A[i] - A[j]);

		for (int j = 0; j < i; ++j)
			insert(A[i] + A[j]);
		}

	printf("%d", ans);

	return 0;
}