Cod sursa(job #2523424)

Utilizator DanutAldeaDanut Aldea DanutAldea Data 14 ianuarie 2020 07:49:40
Problema Oite Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <vector>
#define x first
#define y second
#define dim 1000001
using namespace std;

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

int n,i,j,k,v[1100],l,sum,lung;
vector <pair <int,int> > h[dim];
int sol;

int main(){
    fin>>n>>l;
    for(i=1;i<=n;i++)
        fin>>v[i];

    for(i=2;i<n;i++){
        ///caut
        for(j=i+1;j<=n;j++){
            sum=l-v[i]-v[j];
            if(sum<0)
                continue;

            lung=h[sum%dim].size();
            for(k=0;k<lung;k++)
                if(h[sum%dim][k].x == sum){
                    sol+=h[sum%dim][k].y;
                    break;
                }
        }

        ///adaug
        for(j=1;j<i;j++){
            sum=v[i]+v[j];

            if(sum>l)
                continue;

            lung=h[sum%dim].size();
            for(k=0;k<lung;k++)
                if(h[sum%dim][k].x == sum){
                    h[sum%dim][k].y++;
                    break;
                }

            if(k==lung)
                h[sum%dim].push_back( make_pair(sum,1) );
        }
    }

    fout<<sol;

    return 0;
}