Cod sursa(job #1582554)

Utilizator mihai9913Blaga Mihai mihai9913 Data 28 ianuarie 2016 08:41:59
Problema Loto Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("loto.in");
ofstream fout("loto.out");
struct str{
    int s;
    int p1, p2, p3;
} v[1000];

int n, s, slen, x[101];

void read()
{
 fin>>n>>s;
 for(int i=1;i<=n;i++)
    fin>>x[i];
}

bool srt(str a, str b)
{
    return a.s<b.s;
}
int findSum(int x)
{
    int pos=-1;
    int left = 1, right = slen;
    while(left<=right)
    {   int mid = (left + right) / 2;
        if(v[mid].s < x) left = mid+1;
        else if(v[mid].s > x) right = mid-1;
        else return mid;
    }
    return -1;
}
void formStruct()
{
    for(int i=1;i<=n;i++)
        for(int j=i;j<=n;j++)
            for(int k=j;k<=n;k++)
            {
            v[++slen].s=x[i]+x[j]+x[k];
            v[slen].p1=x[i];
            v[slen].p2=x[j];
            v[slen].p3=x[k];
            }
}

int main()
{
    read();
    sort(v+1, v+n+1, srt);
    formStruct();
    for(int i=1;i<=n;i++)
        for(int j=i;j<=n;j++)
            for(int k=j;k<=n;k++)
            {
                int sum = s-x[i]-x[k]-x[j];
                int ok = findSum(sum);
                if(ok != -1)
                {
                    fout<<x[i]<<" "<<x[j]<< " " << x[k]<<" "<<v[ok].p1<<" "<<v[ok].p2<<" "<<v[ok].p3;
                    return 0;
                }

            }
            fout<<-1;
    return 0;
}