Cod sursa(job #730542)

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

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

inline void Rezolvare()
{
	register int i,j,suma,poz,sol=0;
	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.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++;
				}
			}
		}
	}
	ofstream fout("oite.out");
	fout<<sol<<"\n";
	fout.close();
}

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