Cod sursa(job #856958)

Utilizator mazaandreiAndrei Mazareanu mazaandrei Data 17 ianuarie 2013 09:21:05
Problema Loto Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<fstream>
#include<algorithm>
using namespace std;
struct e{int s,a,b,c;}sol[100000];
int a[105],n,s,acum,nr;
ifstream in("loto.in"); ofstream out("loto.out");
bool cmp(e x, e y){
    if(x.s>y.s) return 0; return 1;
}
void afis(int x, int y){
    out<<sol[x].a<<' '<<sol[x].b<<' '<<sol[x].c<<' '<<sol[y].a<<' '<<sol[y].b<<' '<<sol[y].c<<'\n';
}
int main(){
    in>>n>>s;
    for(int i=1;i<=n;++i) in>>a[i];
    for(int i=1;i<=n;++i){
        for(int j=i;j<=n;++j){
            for(int k=j;k<=n;++k){
                acum=a[i]+a[j]+a[k];
                sol[++nr]=(e){acum,a[i],a[j],a[k]};
            }
        }
    }
    sort(sol+1,sol+nr+1,cmp);
    for(int i=1;i<=nr;++i){
        //caut(i);
        int x=s-sol[i].s,p=1,u=nr,m=(p+u)/2;
        while(p<=u){
            m=(p+u)/2;
            if(x==sol[m].s){
                afis(i,m); return 0;
            }
            else{
                if(x>sol[m].s){
                    p=m+1;
                }
                else{
                    u=m-1;
                }
            }
        }
    }
    out<<"-1\n";
    out.close(); return 0;
}