Pagini recente » Cod sursa (job #1736083) | Cod sursa (job #1255740) | Cod sursa (job #2634170) | Cod sursa (job #151033) | Cod sursa (job #2746645)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream f("loto.in");
ofstream g("loto.out");
long n,S;
bool posibil = false;
vector<long> numerePosibile;
vector<long> rezultate;
vector<long>::iterator it;
int main(){
long x,sumaCurenta, rest, st, dr, mij;
f>>n>>S;
for(int i=0;i<n;i++){
f>>x;
numerePosibile.push_back(x);
}
//creem vectorul de sume posibile
for(int i=0;i<n;i++){
for(int j=i;j<n;j++){
for(int k=j;k<n;k++){
sumaCurenta = numerePosibile[i] + numerePosibile[j] + numerePosibile[k];
rezultate.push_back(sumaCurenta);
}
}
}
sort(rezultate.begin(), rezultate.end());
for(it=rezultate.begin();it!=rezultate.end();it++){
rest = S - *it;
st = 0;
dr = rezultate.size();
while(st<=dr){
mij = (st+dr)/2;
if(rezultate[mij] == rest){
posibil = true;
break;
}else{
if(rezultate[mij] > rest) dr = mij-1;
else st = mij+1;
}
}
}
if(posibil){
for(int i=0;i<n;i++){
for(int j=i;j<n;j++){
for(int k=j;k<n;k++){
sumaCurenta = numerePosibile[i] + numerePosibile[j] + numerePosibile[k];
if(sumaCurenta == rest){
g<<numerePosibile[i]<<" "<<numerePosibile[j]<<" "<<numerePosibile[k]<<" ";
break;
}
}
}
}
for(int i=0;i<n;i++){
for(int j=i;j<n;j++){
for(int k=j;k<n;k++){
sumaCurenta = numerePosibile[i] + numerePosibile[j] + numerePosibile[k];
if(sumaCurenta == S-rest){
g<<numerePosibile[i]<<" "<<numerePosibile[j]<<" "<<numerePosibile[k]<<" ";
break;
}
}
}
}
}else{
g<<-1;
}
}