Cod sursa(job #2568363)

Utilizator NashikAndrei Feodorov Nashik Data 3 martie 2020 22:15:55
Problema Oite Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
//#include <iostream>
#include <fstream>
#include <vector>
#include <unordered_map>
#include <random>
#include <iterator>
#include <algorithm>
using namespace std;
ifstream cin("oite.in");
ofstream cout("oite.out");
unordered_map <int,int> sum;
int v[1050],n,l,suma,var,var1=0;
vector<pair<int,int> > gaina[1000010];
int gas(int a){
    int aa=a,sum=0;
    a%=1000007;
    for(auto u:gaina[a]){
        if(u.first==aa)
            sum+=u.second;
    }
    return sum;
}

//feo e trist
// feo e trist
// feo e trist
// feo e trist
// feo e trist
// feo e trist

void ins(int a){
    int aa=a;
    a%=1000007;
    for(int i=0;i<gaina[a].size();i++){
        if(gaina[a][i].first==aa){
            gaina[a][i].second++;
            return;
        }
    }
    gaina[a].push_back(make_pair(aa,1));
}
int main()
{
    //ofstream cout("oite.out");
    cin>>n>>l;
    for(int i=1;i<=n;i++){
        cin>>v[i];
    }
    sort(v+1,v+n+1);
    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            if(v[i]+v[j]<=l){
                var+=gas(l-v[i]-v[j]);
            }
            //else
              //  break;
        }
        for(int j=1;j<i;j++){
            if(v[i]+v[j]<=l){
                ins(v[i]+v[j]);
            }
            //else
              //  break;
        }
    }
    cout<<var;
    return 0;
}