Cod sursa(job #2554931)

Utilizator etienAndrone Stefan etien Data 23 februarie 2020 15:20:57
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.5 kb
#include<fstream>
#include<vector>
using namespace std;
ifstream fin("loto.in");
ofstream fout("loto.out");
const int K=666013;
int n,i,s,x,rest,v[101],j,k;
struct loto
{
    int suma,i1,i2,i3;
};
vector<loto>r[K+1];
bool exista(int rest,int nr)
{
    int dim=r[rest].size()-1;
    for(int i=0;i<=dim;i++)
        if(r[rest][i].suma==nr)
            return true;
    return false;
}
int main()
{
    fin>>n>>s;
    for(i=1;i<=n;i++)
        fin>>v[i];
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            for(k=1;k<=n;k++)
            {
                loto sum;
                sum.suma=v[i]+v[j]+v[k];
                if(sum.suma>s)
                    continue;
                if(exista(sum.suma%K,sum.suma))
                    continue;
                sum.i1=i;
                sum.i2=j;
                sum.i3=k;
                r[sum.suma%K].push_back(sum);
            }
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            for(k=1;k<=n;k++)
            {
                int sum2=s-v[i]-v[j]-v[k];
                if(sum2<0)
                    continue;
                int r2=sum2%K;
                int dim=r[r2].size()-1;
                for(int l=0;l<=dim;l++)
                {
                    if(r[r2][l].suma==sum2)
                        {fout<<v[i]<<" "<<v[j]<<" "<<v[k]<<" "<<v[r[r2][l].i1]<<" "<<v[r[r2][l].i2]<<" "<<v[r[r2][l].i3];
                        return 0;}
                }
            }
    fout<<-1;
    return 0;
}