Cod sursa(job #1833163)

Utilizator Gigel-FroneGigel Fronel Gigel-Frone Data 21 decembrie 2016 20:21:38
Problema Loto Scor 65
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <cstdio>
#include <vector>
#define mod 666013
 
using namespace std;
 
vector <int> v[mod+1];
 
bool find_value(int value)
{
    int k=value%mod;
    vector <int> :: iterator it;
    for(it=v[k].begin(); it<v[k].end(); it++)
        if(*it == value) return 1;
    return 0;
}
 
void print(int *no, int &n, int x)
{
    for(int m=1; m<=n; m++)
        for(int p=1; p<=n; p++)
            for(int q=1; q<=n; q++)
            {
                if(no[m]+no[p]+no[q] == x)
                {
                    printf(" %d %d %d", no[m], no[p], no[q]);
                    return;
                }
            }
}
 
int main()
{
    freopen("loto.in", "r", stdin);
    freopen("loto.out", "w", stdout);
 
    int n, s, no[101];
    scanf("%d%d", &n, &s);
    for(int i=1; i<=n; i++) scanf("%d", &no[i]);
 
    for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++)
            for(int r=1; r<=n; r++)
            {
                int x=no[i]+no[j]+no[r];
                v[x%mod].push_back(x);
            }
    for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++)
            for(int r=1; r<=n; r++)
            {
                int x=s-(no[i]+no[j]+no[r]);
                if(x >= 0 && find_value(x))
                {
                    printf("%d %d %d", no[i], no[j], no[r]);
                    print(no, n, x);
                    return 0;
                }
            }
    printf("-1");
    return 0;
}