Cod sursa(job #660082)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 11 ianuarie 2012 18:26:35
Problema Oite Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<fstream>
#include<vector>
#include<iostream>
#define NMAX 1030
#define MOD 666013

using namespace std;

ifstream f("oite.in");
ofstream g("oite.out");

struct hash
{
	int x;
	short a, b;
};
int n, s, a[NMAX];
vector<hash> h[NMAX];

void Citeste()
{
	int i;
	f>>n>>s;
	for (i=1; i<=n; ++i) f>>a[i];
}

void Rezolva()
{
	int k, val, hashval, i, j, nr=0;
	hash r;
	for (i=1; i<=n; ++i)
		for (j=1; j<=n; ++j)
			if (i!=j && a[i]+a[j]<=s)
			{
				r.x=a[i]+a[j]; r.a=i; r.b=j;
				h[r.x%MOD].push_back(r);
			}
	for (i=1; i<=n; ++i)
		for (j=1; j<=n; ++j)
			if (i!=j && a[i]+a[j]<=s)
			{
				r.x=a[i]+a[j]; r.a=i; r.b=j;
				val=s-r.x; hashval=val%MOD;
				for (k=0; k<(int)h[hashval].size(); ++k)
					if (h[hashval][k].x==val && h[hashval][k].b!=i && h[hashval][k].b!=j && h[hashval][k].a!=i && h[hashval][k].a!=j)
					{
						++nr;
						//cout<<i<<" "<<j<<" "<<h[hashval][k].a<<" "<<h[hashval][k].b<<"\n";
					}
			}
	g<<nr/24<<"\n";
}

int main()
{
	Citeste();
	Rezolva();
	f.close();
	g.close();
	return 0;
}