Cod sursa(job #1040876)

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