Cod sursa(job #2276343)

Utilizator alexradu04Radu Alexandru alexradu04 Data 4 noiembrie 2018 16:56:13
Problema Loto Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb

#include<cstdio>
#include<fstream>
#include<vector>
#define MOD 666013
using namespace std;
FILE *f=fopen("loto.in","r");
ofstream g("loto.out");
int v[102],i1,i2,i3;
struct elem
{
    int x,a,b,c;
};
vector<elem>h[666015];
void adauga(int x)
{
    int y,n,i,ok=0;
    y=x%MOD;
    n=h[y].size();
    for(i=0; i<n; i++)
        if(h[y][i].x==x)
        {
            ok=1;
            break;
        }
    if(ok==0)
        h[y].push_back({x,i1,i2,i3});
}

int cauta(int x)
{
    int y,n,i;
    y=x%MOD;
    n=h[y].size();
    for(i=0; i<n; i++)
        if(h[y][i].x==x)
        {
            g<<v[h[y][i].a]<<" "<<v[h[y][i].b]<<" "<<v[h[y][i].c]<<" "<<v[i1]<<" "<<v[i2]<<" "<<v[i3];
            return 1;
        }
    return 0;
}

int main()
{
    int n,s,sol=0,i;
    fscanf(f,"%d%d",&n,&s);
    for(i=1; i<=n; i++)
        fscanf(f,"%d",&v[i]);
    for(i1=1; i1<=n; i1++)
        for(i2=1; i2<=n; i2++)
            for(i3=1; i3<=n; i3++)
                adauga(v[i1]+v[i2]+v[i3]);
    for(i1=1; i1<=n&&sol==0; i1++)
        for(i2=1; i2<=n&&sol==0; i2++)
            for(i3=1; i3<=n&&sol==0; i3++)
                if(s-(v[i1]+v[i2]+v[i3])>=0)
                    sol+=cauta(s-(v[i1]+v[i2]+v[i3]));
    if(sol==0)
        g<<-1;
    return 0;
}