Pagini recente » Clasament bulangandit5 | Cod sursa (job #2202727) | Cod sursa (job #2978988) | Cod sursa (job #1809308)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("loto.in");
ofstream out("loto.out");
const int M = 666019;
int n, nr, vf[1000002], urm[1000002], lst[M];
long long int s, a[103];
void adauga( long long int x )
{
int r = x%M;
nr++;
vf[nr] = x;
urm[nr] = lst[r];
lst[r] = nr;
}
bool exista( long long int x )
{
int p, r = x%M;
p = lst[r];
while( p != 0 )
{
if ( vf[p] == x )
return true;
p = urm[p];
}
return false;
}
void afisare( long long int x )
{
int i, j, k;
for ( i = 1; i <= n; i++ )
for ( j = i; j <= n; j++ )
for ( k = j; k<= n; k++ )
if ( a[i] + a[j] + a[k] == x )
{
out << a[i]<<' '<< a[j]<<' '<<a[k];
return;
}
}
int main()
{
in >> n >> s;
int i, j, k;
for ( i = 1; i <= n; i++ )
in >> a[i];
for ( i = 1; i <= n; i++ )
for ( j = i; j <= n; j++ )
for ( k = j; k <= n; k++ )
adauga( a[i] + a[j] + a[k] );
for ( i = 1; i <= n; i++ )
for ( j = i; j <= n; j++ )
for ( k = j; k <= n; k++ )
if ( exista( s - a[i] - a[j] - a[k] ) == true )
{
out << a[i] <<' '<< a[j] <<' '<< a[k] <<' ';
afisare( s - a[i] - a[j] - a[k] );
return 0;
}
out <<-1;
return 0;
}