Cod sursa(job #1385034)

Utilizator MihneaGhiraMihnea MihneaGhira Data 11 martie 2015 17:20:40
Problema Loto Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.31 kb
#include<fstream>
#include<algorithm>
#define ff first.first
#define fs first.second
#define sf second.first
#define ss second.second
using namespace std;
ifstream fin("loto.in");
ofstream fout("loto.out");
int n,i,j,k,h,I,u,mid,s,ok;
int v[101];
pair < pair <int,int> ,pair<int,int> > p[100001];
int main(){
    fin>>n>>s;
    for(i=1;i<=n;i++)
        fin>>v[i];
    if(n>=3){
        for(i=1;i<=n-2;i++){
            for(j=i;j<=n-1;j++){
                for(k=j;k<=n;k++)
                    if(v[i]+v[j]+v[k]<s){

                        p[++h].ff=v[i]+v[j]+v[k];
                        p[h].fs=v[i];
                        p[h].sf=v[j];
                        p[h].ss=v[k];
                    }
            }
        }
    }
    else{
        if(n==2){
            if(v[2]*6==s){
                for(i=1;i<=6;i++)
                    fout<<v[2]<<" ";
                return 0;
            }
            else{
                if(v[1]*6==s){
                    for(i=1;i<=6;i++)
                        fout<<v[i]<<" ";
                    return 0;
                }
                else{
                    fout<<-1;
                    return 0;
                }
            }
        }
        else{
            if(v[1]*6==s){
                for(i=1;i<=6;i++)
                    fout<<v[1]<<" ";
                return 0;
            }
            else{
                fout<<-1;
                return 0;
            }
        }
    }
    sort(p+1,p+h+1);
    ok=0;
    for(i=1;i<=h;i++){
        I=1;
        u=h;
        while(I<=u){
            mid=(I+u)/2;
            if(s-p[i].ff==p[mid].ff){
                break;
            }
            if(s-p[i].ff>p[mid].ff){
                I=mid+1;
            }
            if(s-p[i].ff<p[mid].ff)
                u=mid-1;
        }
        if(I<u){
            if(s-p[i].ff==p[mid].ff){
                fout<<p[i].fs<<" "<<p[i].sf<<" "<<p[i].ss<<" "<<p[mid].fs<<" "<<p[mid].sf<<" "<<p[mid].ss;
                break;
            }
        }
        else{
            if(s-p[i].ff==p[I-1].ff){
                fout<<p[i].fs<<" "<<p[i].sf<<" "<<p[i].ss<<" "<<p[I-1].fs<<" "<<p[I-1].sf<<" "<<p[I-1].ss;
                break;
            }
        }
    }
    if(ok==0)
        fout<<-1;
    return 0;
}