Cod sursa(job #978601)

Utilizator alex_HarryBabalau Alexandru alex_Harry Data 29 iulie 2013 11:02:21
Problema Loto Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("loto.in");
ofstream g("loto.out");
struct Element{
int value;
int first;
int sec;
int last;
};
Element Sums[1000005];
int N,S,Array[105],Top=1,Sol[10],sum,ind;
inline bool cmp(Element a,Element b)
{
    return a.value<b.value;
}
void Read()
{
    int i;
    f>>N>>S;
    for(i=1;i<=N;i++)
        f>>Array[i];
    int j,k;
    for(i=1;i<=N;i++)
        for(j=1;j<=N;j++)
            for(k=1;k<=N;k++)
                Sums[++ind].value=Array[i]+Array[j]+Array[k],Sums[ind].first=i,Sums[ind].sec=j,Sums[ind].last=k;
    sort(Sums+1,Sums+ind+1,cmp);
}
int main()
{
    Read();
    int mid,i;
    for(i=1;i<=ind;i++)
    {
        int val=Sums[i].value,st=1,dr=ind;
        while(st<=dr)
        {
            mid=(st+dr)/2;
            if(val+Sums[mid].value==S)
            {
                g<<Array[Sums[i].first]<<" "<<Array[Sums[i].sec]<<" "<<Array[Sums[i].last]<<" "<<Array[Sums[mid].first]<<" "<<Array[Sums[mid].sec]<<" "<<Array[Sums[mid].last]<<"\n";
                return 0;
            }
            if(val+Sums[mid].value<S)
                st=mid+1;
            if(val+Sums[mid].value>S)
                dr=mid-1;
        }
    }
    g<<-1<<"\n";
    return 0;
}