Cod sursa(job #2260848)

Utilizator armigheGheorghe Liviu Armand armighe Data 15 octombrie 2018 17:43:49
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 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;
}