Cod sursa(job #912824)

Utilizator cernat.catallinFMI Cernat Catalin Stefan cernat.catallin Data 12 martie 2013 20:07:01
Problema Oite Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <stdio.h>
#include <list>
#include <vector>
using namespace std;

#define Cmax 1030
#define Mod 666013

vector < list <int> > hash(Mod);
list <int>::iterator it, last;
int lana[Cmax], solution, c, l;

void read(){
    scanf("%i %i", &c, &l);
    for(register int i = 1; i <= c; ++i) scanf("%i", &lana[i]);
    fclose(stdin);
}

inline void add(int val){
    int hashVal = val%Mod;
    hash[hashVal].push_back(val);
}

inline void search(int val){
    int hashVal = val%Mod;
    it = hash[hashVal].begin();
    last = hash[hashVal].end();

    for(; it != last; ++it)
        if(*it == val){
            ++solution;
        }
}

void solve(){
    for(register int i = 1; i < c; ++i){
        for(register int j = i + 1; j <= c; ++j)
            if(lana[i] + lana[j] < l)
                search( l - (lana[i] + lana[j]) );
        for(int k = 1; k < i; ++k)
            add(lana[i] + lana[k]);
    }
}

int main(){
    freopen("oite.in", "r", stdin);
    freopen("oite.out", "w", stdout);

    read();
    solve();
    printf("%i\n", solution);
    fclose(stdout);

    return 0;
}