Cod sursa(job #834239)

Utilizator dtoniucDaniel Toniuc dtoniuc Data 13 decembrie 2012 23:45:49
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <iostream>
#include <fstream>
#define c 300000
#include <vector>
#include <cstdio>
using namespace std;

long long s,s1,s2;
int n,vec[110],p;
vector<int> v[c + 2000];

int cauta (int s)
{
    int r=s%c;
    if(s<0) return 0;
    for(int i=0;i<v[r].size();++i)
        {
            if(v[r][i] == s) return 1;
        }
    return 0;
}
int main()
{
    freopen("loto.in","r",stdin);
    freopen("loto.out","w",stdout);
    scanf("%d%d",&n,&s);
    for(int i=1;i<=n;++i)
    {
        scanf("%d",&vec[i]);
    }
    for(int i=1;i<=n;++i)
        for(int j=i;j<=n;++j)
            for(int k=j;k<=n;++k)
            {
                s2=vec[i]+vec[j]+vec[k];
                v[s2%c].push_back(s2);
                if(cauta(s-s2))
                {
                    printf("%d %d %d ",vec[i],vec[j],vec[k]);
                    i=j=k=n;
                    p=1;
                }
            }
    if(p==1)
    {
        for(int i=1;i<=n;++i)
            for(int j=i;j<=n;++j)
                for(int k=j;k<=n;++k)
                {
                    s1=vec[i]+vec[j]+vec[k];
                    if(s1==s-s2)
                    {
                        printf("%d %d %d ",vec[i],vec[j],vec[k]);
                        i=j=k=n;
                    }
                }
    }
    else
        printf("-1\n");
    return 0;
}