Cod sursa(job #2761235)

Utilizator VladCaloVlad Calomfirescu VladCalo Data 1 iulie 2021 11:16:50
Problema Loto Scor 65
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.81 kb
#include <iostream>
#include <fstream>
#include <deque>
#include <unordered_map>
using namespace std;



//int apartine(deque <int> dq, int nr)
//{
//   for (int i=0; i<dq.size(); i++)
//   {
//       if(dq[i]==nr) {
//           return 1;
//       }
//   }
//   return 0;
//}
//
//int main() {
//    int n, numere[101],s,x=-1;
//    cin>>n>>s;
//    for (int i=0;i<n;i++)
//    {
//        cin>>numere[i];
//    }
//    deque <int> valpos;
//    for (int i=0; i<n; i++) {
//        for (int j=i; j<n; j++) {
//            for (int k=j; k<n; k++) {
//                valpos.push_back(numere[i]+numere[j]+numere[k]);
//            }
//        }
//    }
//    for (int i=0; i<valpos.size(); i++)
//    {
//        if(apartine(valpos, s-valpos[i]))
//        {
//            x=valpos[i];
//            break;
//        }
//    }
//
//    if(x==-1)
//    {
//        cout<<-1;
//        return 0;
//    }
//
//    cout<<endl;
//    s = s-x;
//    for (int i=0; i<n; i++)
//        for (int j=0; j<n; j++)
//            for (int k=0; k<n; k++)
//    {
//                if(x!=-1 && numere[i]+ numere[j]+numere[k]==x)
//                {
//                    cout<<numere[i]<<" "<<numere[j]<<" "<<numere[k]<<" ";
//                    x = -1;
//                }
//                if(s!=-1 && numere[i]+ numere[j]+numere[k]==s)
//                {                  cout<<numere[i]<<" "<<numere[j]<<" "<<numere[k]<<" ";
//                    s = -1;
//                }
//    }
//
//
//    return 0;
//}

  

ifstream fin("loto.in");
ofstream fout("loto.out");

unordered_map <int, pair <pair<int,int> ,int> > valpos; //memoram tuplurile posibile (suma a cate 3)
int nr[105];
int n,suma;


int main()
{
    
    fin >>n >> suma;
    for (int i=0; i<n;i++)
        fin >>nr[i];
    for (int i=0; i <n; i++)
        for (int j=0; j <n; j++)
            for (int k=0; k<n; k++)
            {
                int s = nr[i] + nr[j] + nr[k]; // suma a celor 3 numere
                valpos[s].first.first= nr[i];
                valpos[s].first.second = nr[j];
                valpos[s].second = nr[k];
                // urmeaza sa cautam daca suma celor 3 nr posibile s are pereche ce completeaza pana la "suma"
                
                //cautam suma-s
                if (valpos.find(suma- s) != valpos.end())
                {
                    fout << valpos[s].first.first << " " << valpos[s].first.second << " " << valpos[s].second << " "; // primele 3 nr ce alcatuiesc s
                    fout << valpos[suma- s].first.first << " "<< valpos[suma - s].first.second << " " << valpos[suma - s].second << " ";// ultimele 3 ce alcatuiesc suma-s
                    return 0;
                }
            }
    fout << -1;
    
//    for (int i=0; i<n ;i++)
//        cout<<valpos[i].first.first<< " "<<valpos[i].first.second<<" "<<valpos[i].second<<" "<<endl;
    return 0;
}