Cod sursa(job #1729363)

Utilizator moise_alexandruMoise Alexandru moise_alexandru Data 14 iulie 2016 16:53:25
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.95 kb
#include <cstdio>
#include <vector>
using namespace std;
const int mod = 19901;
vector <int> exista[mod + 5];
const int maxn = 605;
int v[maxn];

bool _search_(int p)
{
    int x = p % mod;
    for(unsigned int i = 0; i < exista[x].size(); i++)
        if(exista[x][i] == p)
            return 1;
    return 0;
}

void _add_(int p)
{
    if(!_search_(p))
        exista[p % mod].push_back(p);
}
int v2[maxn];
int main()
{
    freopen("loto.in", "r", stdin);
    freopen("loto.out", "w", stdout);
    int m, s;
    scanf("%d%d", &m, &s);
    for(int i = 1; i <= m; i++)
        scanf("%d", &v2[i]);
    int n = 0;
    for(int i = 1; i <= m; i++)
    {
        if(!_search_(v2[i]))
        {
            _add_(v2[i]);
            v[++n] = v2[i];
        }
    }
    for(int i = 0; i <= mod; i++)
        exista[i].clear();
    for(int i = 1; i <= n; i++)
        for(int j = i; j <= n; j++)
            for(int k = j; k <= n; k++)
                _add_(v[i] + v[j] + v[k]);
    int cauta = -1;
    for(int i = 1; i <= n; i++)
    {
        for(int j = i; j <= n; j++)
        {
            for(int k = j; k <= n; k++)
            {
                if(s - v[i] - v[j] - v[k] > 0 && _search_(s - v[i] - v[j] - v[k]))
                {
                    printf("%d %d %d ", v[i], v[j], v[k]);
                    cauta = s - v[i] - v[j] - v[k];
                    j = n + 1;
                    i = n + 1;
                    break;
                }
            }
        }
    }
    if(cauta == -1)
    {
        printf("-1\n");
        return 0;
    }
    for(int i = 1; i <= n; i++)
    {
        for(int j = i; j <= n; j++)
        {
            for(int k = j; k <= n; k++)
            {
                if(v[i] + v[j] + v[k] == cauta)
                {
                    printf("%d %d %d\n", v[i], v[j], v[k]);
                    return 0;
                }
            }
        }
    }
    return 0;
}