Cod sursa(job #2555356)

Utilizator Andrei012Trache Andrei Andrei012 Data 23 februarie 2020 22:00:42
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.57 kb
#include <bits/stdc++.h>

using namespace std;
const int m1=666013;
struct ura{
    int suma,a,b,c;
};
int numere[101];

vector<ura> r[666015];
bool verif(int x,int nr){
        int n=r[x].size()-1,i;
        for(i=0;i<=n;i++)
            if(r[x][i].suma==nr)
                return true;
        return false;
};

int main()
{
    ifstream cin("loto.in");
    ofstream cout("loto.out");

    int n,s,S,i,j,k,st,dr,mij,val,elem,x,m,nr;
    cin>>n>>S;
    s=0;
    for(i=1;i<=n;i++)
        cin>>numere[i];
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            for(k=1;k<=n;k++){
                ura su;
                su.suma=numere[i]+numere[j]+numere[k];
                if(su.suma>S)
                    continue;
                if(verif(su.suma%m1,su.suma))
                    continue;
                su.a=numere[i];
                su.b=numere[j];
                su.c=numere[k];
                r[su.suma%m1].push_back(su);
            }
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            for(k=1;k<=n;k++){
                s=S-numere[i]-numere[j]-numere[k];
                if(s<0)
                    continue;
                x=s%m1;
                m=r[x].size()-1;
                for(nr=0;nr<=m;nr++){
                    if(r[x][nr].suma==s){
                        cout<<numere[i]<<" "<<numere[j]<<" "<<numere[k]<<" ";
                        cout<<r[x][nr].a<<" "<<r[x][nr].b<<" "<<r[x][nr].c;
                        return 0;
                    }
                }
            }
    cout<<-1;
    return 0;
}