Cod sursa(job #908574)

Utilizator TreebirgZugravu Alexandru Treebirg Data 9 martie 2013 18:03:50
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
unsigned long s;
unsigned short n;
unsigned long V[101];
unsigned long long S[101];
unsigned long Sol[6];
void citire()
{
    int i;
    ifstream in("loto.in");
    in>>n>>s;
    for(i=1;i<=n;i++)
        in>>V[i];
    in.close();
}
void init()
{
    int i;
    sort(V+1,V+n+1);
    S[0]=0;
    for(i=1;i<=n;i++)
        S[i]=S[i-1]+V[i];
}
int contains(unsigned long x)
{
    int i;
    for(i=1;i<=n;i++)
        if(V[i]==x)
            return 1;
    return 0;
}
void complete(short end,unsigned long x)
{
    int i;
    for(i=end;i>=1;i--)
        Sol[i]=x;
}
int solve()
{
    int i,j;
    for(i=6;i>=1;i--)
    {
        if(i==1)
            if(contains(s)==0)
                return 0;
        if(s%i==0 && contains(s/i))
        {
            complete(i,s/i);
            return 1;
        }
        else
        {
            for(j=n;j>=1;j--)
                if(s>S[j])
                {
                    s=s-V[j];
                    Sol[i]=V[j];
                    break;
                }
        }
    }
}
int main()
{
    ofstream out("loto.out");
    citire();
    init();
    if(solve())
        for(int i=1;i<=6;i++)
            out<<Sol[i]<<" ";
    else
        out<<"-1";
    out.close();
    return 0;
}