Cod sursa(job #1362966)

Utilizator tudor00Stoiean Tudor tudor00 Data 26 februarie 2015 17:14:08
Problema Loto Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <fstream>
#include <algorithm>
#define NMAX 1000010

using namespace std;

ifstream in("loto.in");
ofstream out("loto.out");

struct punct
{
    int x,y,z;
};

punct sume2[NMAX];
long long n,s,i,j,k,sume[NMAX],v[110],cnt=0,dif;
int cnt2=0,v2[10],ok=0;

int main()
{
    in>>n>>s;
    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++)
            {
                cnt++;
                sume[cnt]=v[i]+v[j]+v[k];
                sume2[cnt].x=v[i];
                sume2[cnt].y=v[j];
                sume2[cnt].z=v[k];
            }
    sort(sume+1,sume+cnt+1);
    for(i=1; i<=cnt; i++)
    {
        dif=s-sume[i];
        v2[1]=sume2[i].x;
        v2[2]=sume2[i].y;
        v2[3]=sume2[i].z;
        long long st=1,dr=cnt,mij,sol=-1;
        while(st<=dr)
        {
            mij=(st+dr)/2;
            if(dif<sume[mij]) dr=mij-1;
            else if(dif>sume[mij]) st=mij+1;
            else
            {
                sol=mij;
                break;
            }
        }
        if(sol!=-1)
        {
            v2[4]=sume2[sol].x;
            v2[5]=sume2[sol].y;
            v2[6]=sume2[sol].z;
            sort(v2+1,v2+7);
            for(j=1; j<=6; j++) out<<v2[j]<<" ";
            ok=1;
            break;
        }
    }
    if(ok==0) out<<-1;
    in.close();
    out.close();
    return 0;
}