Cod sursa(job #529841)

Utilizator dornescuvladVlad Eugen Dornescu dornescuvlad Data 6 februarie 2011 11:40:08
Problema Oite Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

const char iname[] = "oite.in";
const char oname[] = "oite.out";
const int nmax    = 1050;
const int  mod     = 366013;

using namespace std;

ifstream fin(iname);
ofstream fout(oname);

int c, buildsum, i, j, k;
int oaie[nmax];
vector<pair <int, int> > H[366115];
long long sol, ceva;


int main()
{
	fin >> c >> buildsum;
	for(i = 1; i <= c; i ++)
		fin >> oaie[i];
	sort(oaie + 1, oaie + c + 1);
	for(i = 1; i <= c; i ++)
		for(j = i + 1; j <= c; j ++)
			H[(oaie[i] + oaie[j]) % mod].push_back(make_pair(i, j));
	
	for(i = 1; i < c && buildsum - oaie[i] - oaie[i + 1] >= 0 ; i ++)
		for(j = i + 1; j <= c && buildsum - oaie[i] - oaie[j] >= 0; j ++)
			if(buildsum - oaie[i] - oaie[j] >= 0)
			{
				ceva = (buildsum - oaie[i] - oaie[j]) % mod;
				for(k = 0; k < H[ceva].size(); k++)
					if(i != H[ceva][k].first && i != H[ceva][k].second && j != H[ceva][k].first && j != H[ceva][k].second)
						if(j < min(H[ceva][k].first, H[ceva][k].second))
							++sol;
			}
			
	fout << sol;
	return 0;
}