Cod sursa(job #1774111)

Utilizator AndreeazelkoZelko Andreea Andreeazelko Data 8 octombrie 2016 16:19:16
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.62 kb
#include <iostream>
#include <algorithm>
#include <fstream>

using namespace std;

struct grupa{
int S;
int x, y, z;
};
grupa g[10000];
int v[10000];
int t;

bool cmp(grupa a, grupa b){
return a.S<b.S;
}

int cautare(int s, int d, int x){
    int m;
    if(s>d)
        return 0;
    else{
        while(s<=d){
        m=(s+d)/2;
        if(x==g[m].S){
            t=m;
            return m;
        }
        else{
            if(x<g[m].S)
                d=m-1;
            else
                s=m+1;
        }
        }
    }
}

int main()
{
    int n, s, a1, a2, a3, a4, a5, a6, S2;
    int n1, n2, n3, n4, n5, n6;
    int x=0;
    int k=0;
    ifstream in("loto.in");
    ofstream out("loto.out");

    in>>n>>s;
    for(int i=0; i<n; i++){
        in>>v[i];
    }

    for(a1=1; a1<=n; a1++)
        for(a2=a1; a2<=n; a2++)
            for(a3=a2; a3<=n; a3++){
                x++;
                g[x].S=a1+a2+a3;
                g[x].x=a1;
                g[x].y=a2;
                g[x].z=a3;

            }
    sort(g, g+n+1, cmp);

    for(a4=1; a4<=n; a4++)
        for(a5=a4; a5<=n; a5++)
            for(a6=a5; a6<=n; a6++){
                S2=a4+a5+a6;
                if(cautare(0, x, s-S2)){
                    n1=g[t].x;
                    n2=g[t].y;
                    n3=g[t].z;
                    n4=a4;
                    n5=a5;
                    n6=a6;
                    k=1;
                }

            }

    if(k==1)
        out<<n1<<" "<<n2<<" "<<n3<<" "<<n4<<" "<<n5<<" "<<n6<<"\n";
    else
        out<<"-1";

    return 0;
}