Cod sursa(job #1451986)

Utilizator iulianrotaruRotaru Gheorghe-Iulian iulianrotaru Data 19 iunie 2015 14:00:53
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("loto.in");
ofstream g("loto.out");
int N,S,i,j,z,a[101],v[1000012],ab,x,ok;
int cautbin(int caut, int st,int dr)
{
    int mij=(st+dr)/2;
    while(st<=dr)
    {
        if(v[mij]==caut) return mij;
        if(caut<v[mij]) dr=mij-1;
            else st=mij+1;
    }
    return -1;
}
int main()
{
    f>>N>>S;
    for(i=1;i<=N;++i) f>>a[i];
    for(i=1;i<=N;++i)
        for(j=1;j<=N;++j)
            for(z=1;z<=N;++z) v[++x]=a[i]+a[z]+a[j];
    sort(v+1,v+x+1);
    for(i=1;i<=N*N*N;++i) if(cautbin(S-v[i],1,N*N*N)!=-1&&ok==0) ab=v[i],ok=1;
    if(!ok) g<<-1;
    else
    {
        for(i=1;i<=N;++i)
            for(j=1;j<=N;++j)
                for(z=1;z<=N;++z) if(ab==v[i]+v[z]+v[j]) g<<v[i]<<" "<<v[j]<<" "<<v[z]<<" ";
        for(i=1;i<=N;++i)
            for(j=1;j<=N;++j)
                for(z=1;z<=N;++z) if(S-ab==v[i]+v[z]+v[j]) g<<v[i]<<" "<<v[j]<<" "<<v[z]<<" ";
    }
    g.close();
    return 0;
}