Cod sursa(job #1809895)

Utilizator Mircea_DonciuDonciu Mircea Mircea_Donciu Data 19 noiembrie 2016 13:24:06
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <iostream>
#include <fstream>

using namespace std;
const int t=666019;
int n,nr,vf[1000002],urm[1000002],lst[t];
int s,a[103];
bool exista( int x )
{
    int p,r=x%t;
    p=lst[r];
    while(p!=0)
    {
        if(vf[p]==x)
            return 1;
        p=urm[p];
    }
    return 0;
}
void adauga(int x)
{
    if(exista(x)) return;
    int r=x%t;
    nr++;
    vf[nr]=x;
    urm[nr]=lst[r];
    lst[r]=nr;
}
ifstream f("loto.in");
ofstream g("loto.out");
void afisare(int x)
{
    int i, j, k;
    for(i=1; i<=n; i++)
    for(j=i; j<=n; j++)
    for(k=j; k<=n; k++)
    if(a[i]+a[j]+a[k]==x)
    {
        g<<a[i]<<" "<<a[j]<<" "<<a[k]<<'\n';
        return;
    }
}
int main()
{
    f>>n>>s;
    int i, j, k;
    for(i=1; i<=n; i++)
    f>>a[i];
    for(i=1; i<=n; i++)
    for(j=i; j<=n; j++)
    for(k=j; k<=n; k++)
    adauga(a[i]+a[j]+a[k]);
    for(i=1; i<=n; i++)
    for(j=i; j<=n; j++)
    for(k=j; k<=n; k++)
    if(a[i]+a[j]+a[k]<=s && exista(s-a[i]-a[j]-a[k]))
    {
        g<<a[i]<<" "<<a[j]<<" "<<a[k]<<" ";
        afisare(s-a[i]-a[j]-a[k]);
        return 0;
    }
    g<<-1;
    f.close(); g.close();
    return 0;
}