Cod sursa(job #1362970)

Utilizator tudor00Stoiean Tudor tudor00 Data 26 februarie 2015 17:16:59
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.78 kb
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream in("loto.in");
ofstream out("loto.out");
vector<int> v2;
int main()
{
    int i,j,k,t,n,v[110],s,c,sol=-1,flag1=0,flag2=0,st,dr,mij,vsol[10],p=1;
    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++)
               v2.push_back(v[i]+v[j]+v[k]);
    sort(v2.begin(),v2.end());
    for(i=0; i<=v2.size(); i++)
    {
        c=s-v2[i];
        st=0;
        dr=v2.size()-1;
        sol=-1;
        while(st<=dr)
        {
            mij=(st+dr)/2;
            if(c<v2[mij]) dr=mij-1;
            if(c>v2[mij]) st=mij+1;
            if(c==v2[mij])
            {
                sol=v2[i];
                break;
            }
        }
        if(sol!=-1) break;
    }
    for(i=1; i<=n; i++)
        for(j=1; j<=n; j++)
            for(k=1; k<=n; k++)
            {
                if(v[i]+v[j]+v[k]==c && flag1==0)
                {
                    vsol[p]=v[i];
                    p++;
                    vsol[p]=v[j];
                    p++;
                    vsol[p]=v[k];
                    p++;
                    flag1=1;
                }
                if(v[i]+v[j]+v[k]==sol && flag2==0)
                {
                    vsol[p]=v[i];
                    p++;
                    vsol[p]=v[j];
                    p++;
                    vsol[p]=v[k];
                    p++;
                    flag2=1;
                }
                if(flag1==flag2 && flag1==1) break;
            }
    p--;
    sort(vsol+1,vsol+p+1);
    if(flag1==flag2 && flag1==0) out<<-1;
    else
    {
        for(i=1;i<=p;i++)
            out<<vsol[i]<<" ";
    }
}