Cod sursa(job #968265)

Utilizator antonioteoZait Teodor Antonio antonioteo Data 1 iulie 2013 21:50:19
Problema Oite Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
 
#define CMAX 1025
#define MOD 666013
 
int HashValue, SearchValue;
 
struct nod {
    int S;
    nod *next;
};
nod *H[MOD + 3];

void add(int i, int Sum) {
    nod *p = new nod;
    p->S = Sum;
    p->next = H[i];
    H[i] = p;
}
 
int c, L, i, j, Csum, n;
int C[CMAX];
int ANS, c1, c2;
 
void Search_Hash(int X) {
    for (nod *it = H[X]; it; it = it->next) 
		if (it->S == Csum) 
			++ANS;
}
 
int main() {
    freopen("oite.in","r",stdin);
    freopen("oite.out","w",stdout);
    scanf("%i%i", &c, &L);
    for (i = 1; i <= c; ++i)
        scanf("%i", &C[i]);
    for (i = 1; i <= c; ++i) {
        for (j = i + 1; j <= c; ++j) {
                Csum = L - C[i] - C[j];
				if (Csum >= 0) {
					HashValue = Csum % MOD;
					Search_Hash(HashValue);
				}
		}
		for (j = 1; j < i; ++j) {
			Csum = C[i] + C[j];
			HashValue = Csum % MOD;
			add(HashValue, Csum);
		}
    }
    printf("%i\n", ANS);
    return 0;
}