Cod sursa(job #1743688)

Utilizator stefanik_robertzRobert S stefanik_robertz Data 18 august 2016 16:08:21
Problema Loto Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <fstream>
#include <iostream>
struct comb{
    int nr[3],s;
};
using namespace std;
comb a[161701];
int v[100],n,s,sum,k,ax[10],viz[60000000];
ifstream f("loto.in");
ofstream g("loto.out");
bool print;
void scan(){
    f>>n>>s;
    for(int i=0;i<n;i++)
    {
        f>>v[i];
    }
    f.close();
}
void sort(){
    for(int i=0;i<k-1;i++){
        for(int j=i+1;j<k;j++){
            if(a[i].s>a[j].s){
                comb aux=a[i];
                a[i]=a[j];
                a[j]=aux;
            }
        }
    }
}
void afisare(int k){
    cout<<a[k].nr[0]<<" "<<a[k].nr[1]<<" "<<a[k].nr[2]<<" "<<a[k].s<<endl;
}
void add(){
    if(viz[ax[0]+ax[1]+ax[2]]==0){
        viz[ax[0]+ax[1]+ax[2]]=1;
        a[k].nr[0]=ax[0];
        a[k].nr[1]=ax[1];
        a[k].nr[2]=ax[2];
        a[k].s=a[k].nr[0]+a[k].nr[1]+a[k].nr[2];
        k++;
    }
}
int search(int ci,int cf,int x){
    if(ci<=cf){
        int m=(ci+cf)/2;
        if(a[m].s==x)return m;
        if(a[m].s>x)return search(ci,m-1,x);
        return search(m+1,cf,x);
    }
    return -1;
}
void bk(int j){
    if(j<3)
        for(int i=0;i<n;i++){
            ax[j]=v[i];
            if(j==2)add();
            bk(j+1);
        }
}
int main()
{
    scan();
    bk(0);
    sort();
    //for(int i=0;i<k;i++)afisare(i);
    int i;
    for(i=0;i<k;i++){
        int aux=search(i,k-1,s-a[i].s);
        if(aux!=-1){
            g<<a[i].nr[0]<<" "<<a[i].nr[1]<<" "<<a[i].nr[2]<<" "<<a[aux].nr[0]<<" "<<a[aux].nr[1]<<" "<<a[aux].nr[2]<<" ";
            break;
        }
    }
    if(i==k)g<<-1;
    return 0;
}