Cod sursa(job #1315533)

Utilizator serban_ioan97Ciofu Serban serban_ioan97 Data 12 ianuarie 2015 21:36:37
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include<fstream>
#include<vector>
#define mod 666013
#define pb push_back

using namespace std;

ifstream f("loto.in");
ofstream g("loto.out");

vector<long long> kush[mod];
long long v[100];

vector<long long>::iterator find_value(long long x)
{
    int list=x%mod;
    vector<long long>::iterator it;
    for(it=kush[list].begin(); it!=kush[list].end(); it+=4)
        if(*it==x)return it;
    return kush[list].end();
}
void insert_value(long long a, long long b, long long c)
{
    long long x=a+b+c;
    int list=x%mod;
    if(find_value(x)==kush[list].end())
    {
        kush[list].pb(x);
        kush[list].pb(a);
        kush[list].pb(b);
        kush[list].pb(c);
    }
}
int main()
{
    vector<long long>::iterator it;
    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]) insert_value(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];
                    it=find_value(temp);
                    if(it!=kush[temp%mod].end())
                    {
                        g<<v[p]<<" "<<v[q]<<" "<<v[k]<<" ";
                        g<<*(it+1)<<" "<<*(it+2)<<" "<<*(it+3);
                        return 0;
                    }
                }
            }
    g<<"-1";
    return 0;
}