Pagini recente » Cod sursa (job #616525) | Cod sursa (job #275666) | Cod sursa (job #2642924) | Cod sursa (job #424502) | Cod sursa (job #744295)
Cod sursa(job #744295)
#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;
}