Pagini recente » Cod sursa (job #2810174) | Cod sursa (job #348077) | Cod sursa (job #3177427) | Cod sursa (job #95545) | Cod sursa (job #1909979)
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
unordered_map<ll,vector<pair<int,int> > > M;
unordered_set<ll> sum;
ll S,N,A[1050],rs,brut;
int main(){
ifstream cin("oite.in");
ofstream cout("oite.out");
cin >> N >> S;
for(int i = 0;i<N;i++) cin >> A[i];
sort(A,A+N);
for(int i = 0;i<N;i++)
for(int j = i+1;j<N;j++) if(A[i]+A[j]<=S) M[A[i]+A[j]].push_back(make_pair(i,j));
for(int i = 0;i<N;i++)
for(int j = i+1;j<N;j++) if(A[i]+A[j]<=S && sum.find(A[i]+A[j]) == sum.end()){
ll sum1 = A[i]+A[j], sum2=S-A[i]-A[j];
sum.insert(sum1); sum.insert(sum2);
if(M[sum2].empty()) continue;
vector<pair<int,int> > tmp;
for(auto& it:M[sum1]) tmp.push_back(make_pair(it.second,it.first));
sort(tmp.begin(),tmp.end());
sort(M[sum2].begin(),M[sum2].end());
for(auto& it:tmp) rs+=0LL+M[sum2].size()-(upper_bound(M[sum2].begin(),M[sum2].end(),make_pair(it.first,1<<20))-M[sum2].begin());
}
cout << rs;
}