Cod sursa(job #1503139)

Utilizator andreiudilaUdila Andrei andreiudila Data 15 octombrie 2015 16:57:15
Problema Oite Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<fstream>
using namespace std;

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


typedef struct celula
{
    int v,nr;
    celula *next;
}*lista;


lista hash[666013];
int n,s,i,j,a[1050],sol,mm=666013;

void baga(int v)
{
    bool ok=1;
    lista p;
    int poz=v%mm;
    for (p=hash[poz]; p; p=p->next)
        if (p->v==v)
        {
            ++p->nr;
            ok=0;
            break;
        }
    if (ok)
    {
        p=new celula;
        p->v=v;
        p->nr=1;
        p->next=hash[poz];
        hash[poz]=p;
    }
}

int cauta(int v)
{
    int rez=0,poz=v%mm;
    for (lista p=hash[poz]; p; p=p->next)
        if (p->v==v)
        {
            rez=p->nr;
            break;
        }
    return(rez);
}

int main()
{

    fin>>n>>s;
    for (i=1; i<=n; ++i) fin>>a[i];
    for (i=1; i<n; ++i)
    {
        for (j=i+1; j<=n; ++j)
            if (s-a[i]-a[j]>0) sol+=cauta(s-a[i]-a[j]);
        for (j=1; j<i; ++j) baga(a[i]+a[j]);
    }
    fout<<sol;
    return(0);
}