Cod sursa(job #1475062)

Utilizator LucianTLucian Trepteanu LucianT Data 23 august 2015 16:06:45
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <fstream>
#include <algorithm>
using namespace std;
int n,i,j,s,k,v[105],sume[1000005],poz,val,st,dr,mij,x1,x2,x3,x4,x5,x6;
bool gasit;
int main()
{
    ifstream f("loto.in");
    ofstream g("loto.out");
    f>>n>>s;
    for(i=1;i<=n;i++) f>>v[i];
    for(i=1;i<=n;i++)
        for(j=i;j<=n;j++)
            for(k=j;k<=n;k++) sume[++poz]=v[i]+v[j]+v[k];
    sort(sume+1,sume+poz+1);
    for(i=1;i<=n && !gasit;i++)
        for(j=i;j<=n && !gasit;j++)
            for(k=j;k<=n && !gasit;k++)
        {
            val=s-v[i]-v[j]-v[k];
            st=1,dr=poz;
            while(st<=dr)
            {
                mij=(st+dr)/2;
                if(sume[mij]==val) {x1=v[i],x2=v[j],x3=v[k],gasit=true; break;}
                else if(sume[mij]<val) st=mij+1;
                else dr=mij-1;
            }
        }
    if(gasit==false) g<<-1;
    if(gasit)
    {
        g<<x1<<" "<<x2<<" "<<x3<<" ";
        val=s-x1-x2-x3;
        gasit=false;
        for(i=1;i<=n && !gasit;i++)
            for(j=i;j<=n && !gasit;j++)
                for(k=j;k<=n && !gasit;k++)
                {
                    if(v[i]+v[j]+v[k]==val) {x4=v[i],x5=v[j],x6=v[k],gasit=true; break;}
                   // st=1,dr=poz;
                   // while(st<=dr)
                     //   {
                       //  mij=(st+dr)/2;
                        // if(sume[mij]==val) {x1=v[i],x2=v[j],x3=v[k],gasit=true; break;}
                        // else if(sume[mij]<val) st=mij+1;
                        // else dr=mij-1;
                       // }
                }
    g<<x4<<" "<<x5<<" "<<x6;
    }
    f.close();
    g.close();
    return 0;
}