Cod sursa(job #1774298)

Utilizator OlivianOlivian Dan Cretu Olivian Data 8 octombrie 2016 19:42:19
Problema Oite Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
const int maxn=1<<20,prim=41;
ifstream si("oite.in");
ofstream so("oite.out");
int v[1030],h[maxn],vaz[maxn];
int k;

int inc(int i)
{
    if(++i==maxn)
        i=0;
    return i;
}
void hashi(int x)
{
    int i;
    for(i=x%maxn;h[i]!=-1&&h[i]!=x;i=inc(i));
    h[i]=x;
    vaz[i]++;
}
int hashf(int x)
{
    int i;
    for(i=x%maxn;h[i]!=-1&&h[i]!=x;i=inc(i));
    if(h[i]==x)
        return i;
    else
        return -1;
}

int main()
{
    int n,i,j,l,sol=0;
    si>>n>>l;
    memset(h,-1,sizeof h);
    for(i=1;i<=n;i++)
        si>>v[i];
    for(i=3;i<n;i++)
    {
        for(j=1;j<i-1;j++)
            hashi(v[j]+v[i-1]);
        for(j=i+1;j<=n;j++)
            if(l-v[i]-v[j]>=0)
            {
                k=hashf(l-v[i]-v[j]);
                if(k>-1)
                    sol+=vaz[k];
            }
    }
    so<<sol;
    return 0;
}