Cod sursa(job #1415989)

Utilizator ovidiuz98Zamfir Ovidiu ovidiuz98 Data 7 aprilie 2015 00:41:22
Problema Loto Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I Marime 1.78 kb
#include <fstream>
#include <algorithm>
using namespace std;

ifstream fin("loto.in");
ofstream fout("loto.out");
struct comb{
    int x,y,z;
    int sum;
}a[100*100*100+1];
long long n,v[102],i,j,s,d,k,x,st,dr,m,b[7],y;
int caut(int x){
    int st=1;int dr=k;int m;
    while(st<=dr){
        m=(dr+st)>>1;
        if(a[m].sum==x) return m;
        if(a[m].sum<x) st=m+1;
        else dr=m-1;
    }
    return st;
}
int cmp( comb a, comb b){
    if(a.sum < b.sum)
        return 1;
return 0;
}
int main(){

    fin>>n>>s;
    for(i=1;i<=n;i++)
        fin>>v[i];
    sort(v+1,v+n+1);
    for(i=1;i<=n;i++){
        for(j=i;j<=n;j++){
            for(d=j;d<=n;d++)
            {
                a[++k].x=i;
                a[k].y=j;
                a[k].z=d;
                a[k].sum=v[i]+v[j]+v[d];
            }
        }
    }
    sort(a+1,a+k+1,cmp);
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            for(d=1;d<=n;d++){
                if(v[i]+v[j]+v[d]<s){
                        x=s-(v[i]+v[j]+v[d]);
                        y=caut(x);
                            if(a[y].sum==x){
                                b[1]=v[i];
                                b[2]=v[j];
                                b[3]=v[d];
                                b[4]=v[a[y].x];
                                b[5]=v[a[y].y];
                                b[6]=v[a[y].z];
                                //sort(b+1,b+7);
                                for(int i=1;i<=6;i++)
                                    fout<<b[i]<<" ";
                                fin.close();fout.close();
                                return 0;
                            }
                }
            }
    fout<<-1;
    fin.close();fout.close();
    return 0;
}