Cod sursa(job #2049534)

Utilizator HumikoPostu Alexandru Humiko Data 27 octombrie 2017 12:37:42
Problema Loto Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin ("loto.in");
ofstream fout ("loto.out");

int a[101];
struct valori
{
    int suma;
    vector <int> v;
};
vector <valori> vals[1000001];
int modulo = 999983;

void inserare (int suma, int suma_mod, int i, int j, int k)
{
    for ( auto x:vals[suma_mod] )
        if ( x.suma == suma )
            return ;
    valori rand;
    rand.suma = suma;
    rand.v.push_back(i);
    rand.v.push_back(j);
    rand.v.push_back(k);
    vals[suma_mod].push_back(rand);
}

bool diferenta(int dif, int dif_mod)
{
    for ( auto x:vals[dif_mod] )
        if ( x.suma == dif )
        {
            for ( auto y:x.v )
                fout<<a[y]<< " ";
            return true;
        }
    return false;
}

int main()
{
    int n, s;
    fin>>n>>s;
    for ( int i = 0; i < n; ++i )
        fin>>a[i];
    for ( int i = 0; i < n; ++i )
    {
        for ( int j = 0; j < n; ++j )
        {
            for ( int k = 0; k < n; ++k )
            {
                int suma = a[i]+a[j]+a[k];
                int suma_mod = suma%modulo;
                int dif_mod = (s - suma)%modulo;
                inserare (suma, suma_mod, i, j, k);
                if ( s - suma >= 0 && diferenta (s-suma, dif_mod) == true )
                {
                    fout<<a[i]<<" "<<a[j]<<" "<<a[k];
                    return 0;
                }
            }
        }
    }
    fout<<-1;
}