Cod sursa(job #1808788)

Utilizator rangalIstrate Sebastian rangal Data 18 noiembrie 2016 09:20:55
Problema Oite Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>
#define N 1027
#define mod 104729
#define in "oite.in"
#define out "oite.out"

using namespace std;

ifstream fin(in);
ofstream fout(out);

struct nod{
    int info,ct;
    nod *leg;
} *h[mod];

int n,S,a[N];

inline int HFind(int X)
{
    int r=X%mod;
    nod *p;
    for(p=h[r]; p!=NULL && p->info !=X; p=p->leg);
    if(p!=NULL) return p->ct;
    return 0;
}

inline void HAdd(int X)
{
    int r=X%mod;
    nod *p;
    for(p= h[r]; p!=NULL && p->info !=X; p=p->leg);
    if(p==NULL)
    {
        p=new nod;
        p->info=X;
        p->ct=1;
        p->leg=h[r];
        h[r]=p;
    }
    else ++(p->ct);
}

int main()
{
    int rez=0;
    fin>>n>>S;
    for(int i=1; i<=n; ++i)
        fin>>a[i];
    for(int i=1; i<n; ++i)
    {
        for(int j=i+1; j<=n; ++j)
            if(S-a[i]-a[j]>0) rez+=HFind(S-a[i]-a[j]);

        for(int j=i-1; j>0; --j)
            HAdd(a[i]+a[j]);
    }

    fout<<rez<<"\n";
    fin.close(); fout.close();
    return 0;
}