Cod sursa(job #1312025)

Utilizator ArchazeyBaltatu Andrei-Mircea Archazey Data 8 ianuarie 2015 20:23:25
Problema Oite Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include<bits/stdc++.h>
using namespace std;

struct cell
{
    int valoare,frecv;
};

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

const int MODULO=524288;
const int NMAX=1025;

int n,L,a[NMAX];
vector<cell>H[MODULO];
vector<cell>::iterator it;
long long sol;

inline int Add(int val,int ok)
{
    int aux=val&(MODULO-1);
    for (it=H[aux].begin();it!=H[aux].end();it++)
        if ((*it).valoare==val)
            {
                if (ok==0) (*it).frecv++;
                if (ok==1) (*it).frecv--;
                if (ok==2) return (*it).frecv;
                return 0;
            }
    if (ok==0)
        {
            cell k;
            k.valoare=val;
            k.frecv=1;
            H[aux].push_back(k);
        }
    return 0;
}

int main()
{
    int i,j;
    fin>>n>>L;
    for (i=1;i<=n;i++) fin>>a[i];
    for (i=2;i<n;i++)
        for (j=i+1;j<=n;j++)
            Add(a[i]+a[j],0);
    for (i=2;i<(n-1);i++)
        {
            for (j=i+1;j<=n;j++) Add(a[i]+a[j],1);
            for (j=1;j<i;j++)
                if ((a[i]+a[j])<=L)
                    sol+=Add(L-a[i]-a[j],2);
        }
    fout<<sol<<"\n";
    return 0;
}