Cod sursa(job #2216956)

Utilizator flibiaVisanu Cristian flibia Data 28 iunie 2018 14:38:02
Problema Oite Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("oite.in");
ofstream out("oite.out");

int n, L, a[2000];
map <int, int> pairs, mp[1048];
long long ans;

int main(){
	in >> n >> L;
	for(int i = 1; i <= n; i++)
		in >> a[i];
//	pairs.reserve(1024 * 1024 + 123);
//	for(int i = 1; i <= n; i++)
//		mp[i].reserve(n + 23);
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= n; j++){
			if(i == j)
				continue;
			mp[i][a[i] + a[j]]++;
			if(j > i)
				pairs[a[i] + a[j]]++;
		}
	}
	for(int i = 1; i < n; i++){
		for(int j = i + 1; j <= n; j++){
			int sum = a[i] + a[j];
			if(L - sum < 0)
				continue;
			ans += pairs[L - sum] - mp[i][L - sum] - mp[j][L - sum] + (sum == L - sum);
		}
	}
	out << ans / 6;
	return 0;
}