Cod sursa(job #1582564)

Utilizator mihai9913Blaga Mihai mihai9913 Data 28 ianuarie 2016 08:55:31
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 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[100*100*100+1];

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 left = 1, right = slen;
    while(left<=right)
    {   int mid = (left + right) / 2;
        if(v[mid].s == x) return mid;
        else if(x>v[mid].s)
                left = mid+1;
            else
                right = mid-1;

    }
    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();

    formStruct();

    sort(v+1, v+slen+1, srt);
    bool sol=false;
    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 && !sol)
                {
                    fout<<x[i]<<" "<<x[j]<< " " << x[k]<<" "<<v[ok].p1<<" "<<v[ok].p2<<" "<<v[ok].p3;
                    sol=true;
                }

            }
           if(!sol) fout<<-1;

    return 0;
}