Mai intai trebuie sa te autentifici.

Cod sursa(job #1553860)

Utilizator iuliaotilia26Mustea Iulia-Otilia iuliaotilia26 Data 20 decembrie 2015 17:15:33
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("loto.in");
ofstream g("loto.out");
int n,v[101],nr;
long S;
typedef struct STR
{
    int a,b,c;
    long s;
};
STR sum[1000001];
void citire()
{
    f>>n>>S;
    for(int i=1;i<=n;i++)
        f>>v[i];
}
void calc()
{
    int Suma;
    for(int i=1;i<=n;i++)
        for(int j=i;j<=n;j++)
            for(int k=j;k<=n;k++)
    {
        Suma=v[i]+v[k]+v[j];
        //if(Suma<=S)
            ++nr;
            sum[nr].s=Suma;
            sum[nr].a=i;
            sum[nr].b=j;
            sum[nr].c=k;
    }
}
int comp(STR a,STR b)
{
    if(a.s < b.s)return 1;
    return 0;
}
void afis(STR x, STR y)
{
    g<<v[x.a]<<' '<<v[x.b]<<' '<<v[x.c]<<' '<<v[y.a]<<' '<<v[y.b]<<' '<<v[y.c];
}
void cautbin()
{
    int i,j,mij,ok=0;
    long s1,s2;
    i=1;j=nr;
    while(i<=j)
    {
        s1=sum[i].s;
        s2=S-sum[i].s;
        while(i<=j&&sum[j].s>s2)j--;
        if(i>j)
        {
            g<<-1;
            break;
        }
        if (sum[j].s!=s2)
        {
            i++;
            continue;
        }
        afis(sum[i], sum[j]);break;
    }
    if (i>j) g<<-1;
}
int main()
{

    citire();
    calc();
    sort(sum+1,sum+nr+1,comp);
    /*for(int i=1;i<=nr;i++)
        g<<sum[i].s<<" ";
    */
    cautbin();
    f.close();
    g.close();
    return 0;
}