Cod sursa(job #730530)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 6 aprilie 2012 14:05:02
Problema Oite Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<fstream>
#include<cmath>
#include<vector>
#define MOD 666013
using namespace std;
int n,L,v[1030];
struct Suma{int sum,ind1,ind2;};
vector <Suma> H[666013];
int sol;

void Citire()
{
	int i;
	ifstream fin("oite.in");
	fin>>n>>L;
	for(i=1;i<=n;i++)
		fin>>v[i];
	fin.close();
}

void Rezolvare()
{
	int i,j,suma,poz;
	Suma aux;
	vector <Suma>::iterator it;
	//Precalculare sume
	for(i=1;i<n;i++)
	{
		for(j=i+1;j<=n;j++)
		{
			aux.ind1=i;
			aux.ind2=j;
			aux.sum=v[i]+v[j];
			H[aux.sum%MOD].push_back(aux);
		}
	}
	//Rezolvare
	for(i=1;i<n;i++)
	{
		for(j=i+1;j<=n;j++)
		{
			suma=L-v[i]-v[j];
			if(suma>=0)
			{
				poz=suma%MOD;
				for(it=H[poz].begin();it!=H[poz].end();it++)
				{
					aux=*it;
					if(aux.sum==suma && aux.ind1>j)
						sol++;
				}
			}
		}
	}
}

void Afisare()
{
	ofstream fout("oite.out");
	fout<<sol<<"\n";
	fout.close();
}

int main()
{
	Citire();
	Rezolvare();
	Afisare();
	return 0;
}