Cod sursa(job #2966142)

Utilizator Pop_EmilPal Tamas Pop_Emil Data 16 ianuarie 2023 19:38:22
Problema Loto Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.57 kb
#include <iostream>
#include <iterator>
#include <map>
using namespace std;
FILE *in = fopen("loto.in", "r"), *out = fopen("loto.out", "w");

int N, S;
int t[105];

map <int, int> m1;

int main()
{
    fscanf(in, "%d %d", &N, &S);
    for (int i = 0; i < N; ++i)
        fscanf(in, "%d", &t[i]);

    for (int i = 0; i < N; ++i)
        for (int j = i; j < N; ++j)
            for (int k = j; k < N; ++k){
                m1[t[i] + t[j] + t[k]] = t[i]*100*100 + t[j]*100 + t[k];
            }

    map<int, int>::iterator itl, itr, itm;
    int grp1, grp2;
    for(auto it1 = m1.begin(); it1 != m1.end(); ++it1)
        for(auto it2 = it1; it2 != m1.end(); ++it2){
            if (it1->first + it2->first == S){
                grp1 = it1->second;
                grp2 = it2->second;
                fprintf(out, "%d %d %d %d %d %d", grp1/100/100, grp1/100%100, grp1%100, grp2/100/100, grp2/100%100, grp2%100);
                return 0;
            }

    /*
        itl = m1.begin();
        itr = m1.end();
        while (itl != itr){
            itm = advance((itl + itr)/2;
            if (S < itm->first + it1->first)
                itr = itm - 1;
            else if (S > itm->first + it1->first)
                itl = itm + 1;
            else {
                grp1 = it1->second;
                grp2 = itm->second;
                fprintf(out, "%d %d %d %d %d %d", grp1/100/100, grp1/100, grp1%100, grp2/100/100, grp2/100, grp2%100);
                return 0;
            }
        }
    */
    }

    fprintf(out, "-1");
    return 0;
}