Cod sursa(job #2299924)

Utilizator lucaperjuLuca Perju Verzotti lucaperju Data 10 decembrie 2018 15:57:52
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream cin ("loto.in");
ofstream cout ("loto.out");
int v[103];//sume[1000003];
//unordered_map<int,bool>mp;
vector<int>sal[666015];
const int mod=666013;
bool verif (int val)
{
    int poz=val%mod;
    if(val<0)
        return false;
    for(int i=0;i<sal[poz].size();++i)
        if(sal[poz][i]==val)
            return true;
    return false;
}
void baga (int val)
{
    int poz=val%mod;
    if(val<0)
        return;
    if(!verif(val))
        sal[poz].push_back(val);
}
int main()
{
    int n,s,i,k=0,j,y,s1=-1,ok0=1,ok1=1;
    cin>>n>>s;
    for(i=1;i<=n;++i)
        cin>>v[i];
    for(i=1;i<=n;++i)
        for(j=i;j<=n;++j)
            for(y=j;y<=n;++y)
            {
                int sc=v[i]+v[j]+v[y];
                baga(sc);
            }
    for(i=1;i<=n;++i)
        for(j=i;j<=n;++j)
            for(k=j;k<=n;++k)
                if(verif(s-v[i]-v[j]-v[k]))
                    s1=v[i]+v[j]+v[k];
    if(s1==-1){cout<<s1;return 0;}
    for(i=1;i<=n;++i)
        for(j=i;j<=n;++j)
            for(y=j;y<=n;++y)
            {
                if(v[i]+v[j]+v[y]==s1 && ok1)
                {
                    cout<<v[i]<<' '<<v[j]<<' '<<v[y]<<' ';
                    ok1=0;
                }
                if(v[i]+v[j]+v[y]==s-s1 && ok0)
                {
                    cout<<v[i]<<' '<<v[j]<<' '<<v[y]<<' ';
                    ok0=0;
                }
            }
    return 0;
}