Cod sursa(job #971859)

Utilizator OnimushaLordTiberiu Copaciu OnimushaLord Data 10 iulie 2013 13:48:05
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.65 kb
# include <cstdio>
# include <vector>
# define MOD 666013
# define pb push_back
# define MAXN 110
using namespace std;
int x,y,suma;
struct hash
{
    int x,y,suma;
};
hash val;
vector <hash> s[MOD];
vector <hash> :: iterator it;
int N,S,i,ind,a[MAXN];

vector <hash> :: iterator find(int x)
{
    for(it=s[ind].begin(); it!=s[ind].end(); ++it)
    if((*it).suma==x) return it;
    return it;
}
void solve()
{
    int i,j,k,n;
    for(i=1; i<=N; ++i)
        for(j=1; j<=N; ++j)
            for(k=1; k<=N; ++k)
                if((a[i]+a[j]+a[k])*2==S)
                {
                    printf("%d %d %d %d %d %d\n", a[i],a[i],a[j],a[j],a[k],a[k]);
                    return;
                }
                else
                {
                    if(S-a[i]-a[j]-a[k]>=0){
                        ind=(S-a[i]-a[j]-a[k])%MOD;
                        it=find(S-a[i]-a[j]-a[k]);
                        if(it!=s[ind].end())
                        {
                            printf("%d %d %d %d %d %d", a[i],a[j],a[k],(*it).x,(*it).y,(*it).suma-(*it).x-(*it).y);
                            return;
                        }
                    }
                    ind=(a[i]+a[j]+a[k])%MOD;
                    val.x=a[i];
                    val.y=a[j];
                    val.suma=a[i]+a[j]+a[k];
                    it=find(val.suma);
                    if(it==s[ind].end()) s[ind].pb(val);

                }
    printf("-1");
}
int main()
{
    freopen("loto.in", "r", stdin);
    freopen("loto.out", "w", stdout);
    scanf("%d %d\n", &N, &S);
    for(i=1; i<=N; ++i) scanf("%d", &a[i]);
    solve();
}