Cod sursa(job #498313)

Utilizator mathboyDragos-Alin Rotaru mathboy Data 4 noiembrie 2010 20:36:54
Problema Oite Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <cstdio>
#include <vector>
#include <algorithm>
#define maxn 1050
#define vit vector <pair <int, pair <int, int> > > :: iterator
#define f first
#define s second
#define mod 666013
#define maxmod 666115
using namespace std;

int C, L, A[maxn];
long sum;
vector <pair <int, pair <int, int> > > H[maxmod];
int main ()
{

	freopen ("oite.in", "r", stdin);
	freopen ("oite.out", "w", stdout);
	
	pair <int, pair <int, int> > val;
	int i, j;
	scanf ("%d%d\n", &C, &L);

	for (i = 1; i <= C; i++)
		scanf ("%d", A + i);
	
	sort (A + 1, A + C + 1);
	for (i = 1; i < C; i++)
		for (j = i + 1; j <= C; j++) {
			
			val.f = A[i] + A[j];
			val.s.f = i;
			val.s.s = j;
			H[(A[i] + A[j]) % mod].push_back (val);
		}	
//	return 0;	
	for (i = 1; i < C - 1 && L - A[i] - A[i + 1] >= 0; i++) {

		for (j = i + 1; j <= C; j++) {
			if (L - A[i] - A[j] < 0) continue;
			int x = (L - A[i] - A[j]) % mod;
			for (int k = 0; k < H[x].size (); k++)
				
				if (H[x][k].f == L - A[i] - A[j] && H[x][k].s.f != i && H[x][k].s.s != j && H[x][k].s.f != j && H[x][k].s.s != i) {
					if (j < min (H[x][k].s.s, H[x][k].s.f)) {
						sum += 1;
				//		printf ("%d %d %d %d\n", i, j, H[x][k].s.f, H[x][k].s.s);
					}
				}
		}
	}
	printf ("%ld\n", sum);
	return 0;
}