Cod sursa(job #808768)

Utilizator BalcauIonutFMI-Balcau Ionut BalcauIonut Data 7 noiembrie 2012 11:18:51
Problema Loto Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include<iostream>
#include<vector>
#include<fstream>
#define P 666013
using namespace std;


vector<int> h[P];

vector<int>::iterator find(int x){
	int r=x%P;
	vector<int>::iterator it;
	for(it=h[r].begin();it!=h[r].end();++it)
		if(*it==x) return it;
	return h[r].end();
}
		
int push(int x){
	int r=x%P;
	if(find(x)==h[r].end()){
			h[r].push_back(x);
			return 1;
	}
}

void pop(int x){
	int r=x%P;
	vector<int>::iterator it=find(x);
	if(it!=h[r].end()) h[r].erase(it);
}


int main(){
	int a[101],s,i,j,k,n,s1,s2;
	vector<int> sum;
	ifstream fin("loto.in");
	ofstream fout("loto.out");
	fin>>n>>s;
	for(i=1;i<=n;++i)
		fin>>a[i];
	fin.close();
	for(i=1;i<=n;++i)
		for(j=i;j<=n;++j)
			for(k=j;k<=n;++k)
				if(push(a[i]+a[j]+a[k])) sum.push_back(a[i]+a[j]+a[k]);
	vector<int>::iterator it;
	bool ok=0;
	for(it=sum.begin();it!=sum.end();++it)
		if(find(s-*it)!=h[(s-*it)%P].end()){
			s1=*it; s2=s-*it; ok=1;
		
		for(i=1;i<=n;++i)
			for(j=i;j<=n;++j)
				for(k=j;k<=n;++k)
					if(a[i]+a[j]+a[k]==s1) fout<<a[i]<<' '<<a[j]<<' '<<a[k]<<' ';
		for(i=1;i<=n;++i)
			for(j=i;j<=n;++j)
				for(k=j;k<=n;++k)
					if(a[i]+a[j]+a[k]==s2) fout<<a[i]<<' '<<a[j]<<' '<<a[k];
		break;
		}
	if(!ok) fout<<-1;
	return 0;
}