Cod sursa(job #744295)

Utilizator harababurelPuscas Sergiu harababurel Data 8 mai 2012 11:49:17
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;

int main() {
	ifstream f("loto.in");
	ofstream g("loto.out");
	long long n, s, i, j, k, l, begin, end, mid;
	vector <long long> v, nr;
	bool gasit=0;
	
	//toate combinatiile de 6 numere de la 1 la N
	
	
	f>>n>>s;
	
	nr.push_back(0);
	for(i=1; i<=n; i++) {
		f>>l;
		nr.push_back(l);
	}
	
	//am a,b,c,d,e,f numere
	//fac vector predefinit pentru a,b,c
	//3 foruri pentru d,e,f
	//si cautare binara in vectorul de valori
	
	for(i=1; i<=n; i++) {
		for(j=1; j<=n; j++) {
			for(k=1; k<=n; k++) {
				v.push_back(nr[i]+nr[j]+nr[k]);
			}
		}
	}
	cout<<v.size();
	sort(v.begin(), v.end());	//ca sa pot cauta binar
	
	for(i=1; i<=n; i++) {
		for(j=1; j<=n; j++) {
			for(k=1; k<=n; k++) {
				
				if(!gasit) {
					begin = 0;
					end = v.size();
					while(end-begin > 1) {
						mid = begin+(end-begin)/2;
						if(v[mid]+nr[i]+nr[j]+nr[k] >= s) end = mid;
						else begin = mid;
					}
					
					//if(v[mid]+nr[i]+nr[j]+nr[k] == s) end=mid;
					//if(v[begin]+nr[i]+nr[j]+nr[k]==s) end=begin;
					
					if(v[end] + nr[i] + nr[j] + nr[k] == s) {	//am gasit o solutie buna
							g<<nr[i]<<" "<<nr[j]<<" "<<nr[k]<<" ";
							g<<v[end]/3<<" "<<v[end]/3<<" "<<v[end] - 2*(v[end]/3);
							gasit=1;
							break;
					}
				}
				
			}
		}
	}
	
	if(!gasit) { g<<"-1\n"; }
	
	
	f.close();
	g.close();
	return 0;
}