Cod sursa(job #2265919)

Utilizator cyber_ghSoltan Gheorghe cyber_gh Data 21 octombrie 2018 21:44:05
Problema Loto Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <bits/stdc++.h>

using namespace std;

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

int N, S, S1, S2;
int A[101];

bitset<600000001> SUM;

void searchWithBreak(){
    for (int i = 0; i < N;i++)
        for(int j = 0; j < N;j++)
            for(int k = 0; k < N;k++) {
                    //cout << A[i] + A[j] + A[k] << " " << S - A[i] + A[j] + A[k] << endl;
                    if (SUM[A[i] + A[j] + A[k]] && SUM[S - (A[i] + A[j] + A[k])] ) {
                S1 = A[i] + A[j] + A[k];
                S2 = N - A[i] + A[j] + A[k];
                return ;
            }
            }
}

void lastSearch(){
    for (int i = 0; i < N;i++)
        for(int j = 0; j < N;j++)
            for(int k = 0; k < N;k++) {
               if (A[i] + A[j] + A[k] == S1){
                fout << A[i] << " " << A[j] << " " << A[k] <<" ";
                S1 = -1;
               }
               if (A[i] + A[j] + A[k] == S2){
                fout << A[i] << " " << A[j] << " " << A[k] <<" ";
                S2 = -1;
               }
            }
}

int main(){
    //cout << sizeof(SUM);
    fin >> N >> S;
    for( int i = 0; i < N;i++) fin >> A[i];
    for (int i = 0; i < N;i++)
        for(int j = 0; j < N;j++)
            for(int k = 0; k < N;k++) SUM[A[i] + A[j] + A[k]] = 1;

    //for (int i = 0; i < S; i++) cout << SUM[i];
    //cout << endl;
    searchWithBreak();
    lastSearch();
    //cout << S1 << " " << S2;
    return 0;
}