Cod sursa(job #1042102)

Utilizator NitaMihaitavoidcube NitaMihaita Data 26 noiembrie 2013 16:36:04
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include<fstream>
#include<iostream>
#include<vector>
#define numaru 666019
using namespace std;
ifstream f("loto.in");
ofstream g("loto.out");
vector<long long> w[numaru];
long long v[100];
vector<long long>::iterator cauta(long long x)
{
    int unde=x%numaru;
    vector<long long>::iterator i;
    for(i=w[unde].begin(); i!=w[unde].end();i+=4)
        if(*i==x)return i;
    return w[unde].end();
}
void adauga(long long a,long long b,long long c)
{
    long long x=a+b+c;
    int unde=x%numaru;
    if(cauta(x)==w[unde].end())
    {
        w[unde].push_back(x);
        w[unde].push_back(a);
        w[unde].push_back(b);
        w[unde].push_back(c);
    }
}
int main()
{
    vector<long long>::iterator i;
    int n,p,q,k;
    long long x,s[6],temp;
    f>>n>>x;
    for(k=0;k<n;++k)
    {
        f>>v[k];
    }
    for(p=0;p<n;++p)for(q=p;q<n;++q)for(k=q;k<n;++k)if(x>v[p]+v[q]+v[k])adauga(v[p],v[q],v[k]);
    s[0]=-1;
    for(p=0;p<n;++p)for(q=p;q<n;++q)for(k=q;k<n;++k)
    {
        if(x>=v[p]+v[q]+v[k])
        {
            temp=x-v[p]-v[q]-v[k];
            i=cauta(temp);
            if(i!=w[temp%numaru].end()) { s[0]=v[p];s[1]=v[q]; s[2]=v[k];s[3]=*(i+1);s[4]=*(i+2);s[5]=*(i+3); p=q=k=n; }
        }
    }
    if(s[0]!=-1) for(k=0;k<6;++k)g<<s[k]<<" ";
    else g<<"-1";
    g<<"\n";
    f.close();
    g.close();
    return 0;
}