Pagini recente » Cod sursa (job #2029861) | Cod sursa (job #2534849) | Cod sursa (job #2948714) | Cod sursa (job #1197072) | Cod sursa (job #2216961)
#include <bits/stdc++.h>
using namespace std;
ifstream in("oite.in");
ofstream out("oite.out");
int n, L, a[2000];
vector <int> pairs, mp[1048];
long long ans;
int main(){
in >> n >> L;
for(int i = 1; i <= n; i++)
in >> a[i];
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
if(i == j)
continue;
mp[i].push_back(a[i] + a[j]);
if(j > i)
pairs.push_back(a[i] + a[j]);
}
sort(mp[i].begin(), mp[i].end());
}
sort(pairs.begin(), pairs.end());
for(int i = 1; i < n; i++){
for(int j = i + 1; j <= n; j++){
int sum = a[i] + a[j];
int sum2 = L - sum;
if(L - sum < 0)
continue;
ans += (sum == L - sum);
ans += upper_bound(pairs.begin(), pairs.end(), sum2) - pairs.begin();
ans -= lower_bound(pairs.begin(), pairs.end(), sum2) - pairs.begin();
ans -= upper_bound(mp[i].begin(), mp[i].end(), sum2) - mp[i].begin();
ans += lower_bound(mp[i].begin(), mp[i].end(), sum2) - mp[i].begin();
ans -= upper_bound(mp[j].begin(), mp[j].end(), sum2) - mp[j].begin();
ans += lower_bound(mp[j].begin(), mp[j].end(), sum2) - mp[j].begin();
}
}
out << ans / 6;
return 0;
}