Cod sursa(job #1803193)

Utilizator dinurosca03Rosca Dinu Cristian dinurosca03 Data 11 noiembrie 2016 08:54:27
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
int v[105],sum[1000005];
int main(){
    freopen("loto.in","r",stdin);
    freopen("loto.out","w",stdout);
    int n,s,nr,i,ok=0,j,k,h,g;
    cin>>n>>s;
    for(i=0;i<n;i++)
        cin>>v[i];
    nr=0;
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            for(k=0;k<n;k++)
                sum[nr++]=v[i]+v[j]+v[k];
    sort(sum, sum+nr);
    ok=0;
    for(i=0;i<nr;i++){
        int st=0,dr=n-1;
        while(st<dr){
            int mij=(st+dr)/2;
            if(s-sum[i]==sum[mij]){
                break;
                ok=1;
            }
            if(s-sum[i]<sum[mij])
                st=mij-1;
            if(s-sum[i]>sum[mij])
                dr=mij+1;
        }
        if(ok==1)
            break;
    }
    if(ok==0)
        printf("-1");
    else{
        k=1;
        for(j=0;j<n && k==1;j++){
            for(h=0;h<n && k==1;h++){
                for(g=0;g<n && k==1;g++)
                    if(sum[j]+sum[h]+sum[g]==sum[i]){
                        k=0;
                        printf("%d %d %d ", v[j], v[h], v[g]);
                    }
            }
        }
        k=1;
        for(j=0;j<n && k==1;j++){
            for(h=0;h<n && k==1;h++){
                for(g=0;g<n && k==1;g++)
                    if(sum[j]+sum[h]+sum[g]==s-sum[i]){
                        k=0;
                        printf("%d %d %d ", v[j], v[h], v[g]);
                    }
            }
        }
    }
    return 0;
}