Cod sursa(job #2746653)

Utilizator MihaelaDanilaDanila Mihaela MihaelaDanila Data 28 aprilie 2021 11:30:44
Problema Loto Scor 15
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.35 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>

using namespace std;

ifstream f("loto.in");
ofstream g("loto.out");

bool posibil = false;
long n,S;
vector<long> numerePosibile;
vector<long> rezultate;
vector<long>::iterator it;
vector<long>::iterator go;

int main(){
    long x,rest;
    f>>n>>S;
    for(int i=0;i<n;i++){
        f>>x;
        numerePosibile.push_back(x);
    }
            //fac vectorul cu toate sumele partiale
    for(int i=0;i<numerePosibile.size();i++){
        for(int j=i;j<numerePosibile.size();j++){
            for(int k=j;k<numerePosibile.size();k++){
                int sumaCurenta;
                sumaCurenta = numerePosibile[i]+numerePosibile[j]+numerePosibile[k];
                rezultate.push_back(sumaCurenta);
            }
        }
    }
            //sortez sumele posibile
    sort(rezultate.begin(), rezultate.end());

    for(it=rezultate.begin();it!=rezultate.end();it++){
        rest = S-*it;
        //go = find(rezultate.begin(), rezultate.end(), rest);
        for(go=rezultate.begin();go!=rezultate.end()&&*go!=rest;go++){
        }
        if(go!=rezultate.end()){
            posibil = true;
            break;
        }
    }
    if(posibil){
        for(int i=0;i<numerePosibile.size();i++){
            for(int j=i;j<numerePosibile.size();j++){
                for(int k=j;k<numerePosibile.size();k++){
                    int sumaCurenta;
                    sumaCurenta = numerePosibile[i]+numerePosibile[j]+numerePosibile[k];
                    if(sumaCurenta == S-rest){
                        g<<numerePosibile[i]<<" "<<numerePosibile[j]<<" "<<numerePosibile[k]<<" ";
                        break;
                    }
                }
            }
        }
        for(int i=0;i<numerePosibile.size();i++){
            for(int j=i;j<numerePosibile.size();j++){
                for(int k=j;k<numerePosibile.size();k++){
                    int sumaCurenta;
                    sumaCurenta = numerePosibile[i]+numerePosibile[j]+numerePosibile[k];
                    if(sumaCurenta == rest){
                        g<<numerePosibile[i]<<" "<<numerePosibile[j]<<" "<<numerePosibile[k];
                        break;
                    }
                }
            }
        }
    }else{
        g<<-1;
    }
    return 0;
}