Cod sursa(job #1928885)

Utilizator MihaelaCismaruMihaela Cismaru MihaelaCismaru Data 16 martie 2017 20:44:14
Problema Loto Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.17 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream in("loto.in");
ofstream out("loto.out");
long long n,suma,sum,g,s[100001],v[1001],st,dr,mid,i,j,k,a,b,c,ok,da;
int main(){
    in>>n>>suma;
    for(i=1;i<=n;i++){
        in>>v[i];
    }
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
            for(k=1;k<=n;k++){
                g++;
                s[g]=v[i]+v[k]+v[j];
            }
        }
    }
    sort(s+1,s+g+1);
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
            for(k=1;k<=n;k++){
                sum=suma-v[i]-v[j]-v[k];
                st=1;
                dr=g;
                while(st<=dr){
                    mid=(st+dr)/2;
                    if(s[mid]<sum){
                        st=mid+1;
                    }
                    if(s[mid]>sum){
                        dr=mid-1;
                    }
                    if(s[mid]==sum){
                        ok=1;
                        break;
                    }


                }
                if(ok==1){
                    out<<v[i]<<" "<<v[j]<<" "<<v[k]<<" ";
                    for(a=1;a<=n;a++){
                        for(b=1;b<=n;b++){
                            for(c=1;c<=n;c++){
                                if(v[a]+v[b]+v[c]==sum){
                                    out<<v[a]<<" "<<v[b]<<" "<<v[c];
                                    da=1;
                                    break;
                                }
                            }
                            if(da==1){
                                break;
                            }
                        }
                        if(da==1){
                            break;
                       }
                    }
                    if(da==1){
                        break;
                            }
                }
                if(da==1){
                    break;
                        }
            }
            if(da==1){
                break;
                    }
        }
        if(da==1){
            break;
                }
    }
    if(ok==0){
        out<<-1;
    }
    return 0;
}