Cod sursa(job #1074903)

Utilizator WyvernFMI Stanescu Leonard Wyvern Data 8 ianuarie 2014 09:32:37
Problema Loto Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.72 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fi("loto.in");
ofstream fo("loto.out");
struct valori {
int a,b,c,suma;};
int v[100],s,x,y,nr;
short n;
valori w[1000002];

int comparare(const valori &x,const valori &y)
{
    return(x.suma < y.suma);
}

int main()
{
    fi>>n>>s;
    for (int i=1;i<=n;i++) {
        fi>>v[i];
        if (v[i]*6==s)
            x=v[i];
        if (v[i]>y)
            y=v[i];
    }
    if (x!=0)
        for (int i=1;i<=6;i++)
            fo<<x<<' ';
    else
        if (y*6<s)
            fo<<'-1';
        else
            for (int i=1;i<=n;i++)
                for (int j=i;j<=n;j++)
                    for (int k=j;k<=n;k++) {
                        nr++;
                        w[nr].a=v[i];
                        w[nr].b=v[j];
                        w[nr].c=v[k];
                        w[nr].suma=v[i]+v[j]+v[k];
                    }
    sort(w+1,w+nr+1,comparare);
    int ok=1,sum=0,mid=0;
    for (int i=1;i<=n;i++)
        for (int j=i;j<=n;j++)
            for (int k=j;k<=n;k++) {
                sum=s-v[i]-v[j]-v[k];
                int st=1,dr=nr;
                while ((st<=dr)&&(ok==1)) {
                    mid=(st+dr)/2;
                    if (w[mid].suma>sum)
                        dr=mid-1;
                    else
                        if (w[mid].suma<sum)
                            st=mid+1;
                        else
                            ok=0;
                }
                if (!ok) {
                    fo<<v[i]<<' '<<v[j]<<' '<<v[k]<<' '<<w[mid].a<<' '<<w[mid].b<<' '<<w[mid].c;
                    break;
                }
            }
    return 0;
}