Pagini recente » Istoria paginii runda/doerm | Monitorul de evaluare | Cod sursa (job #2432840) | Istoria paginii runda/simulareoji2015cl9 | Cod sursa (job #1443569)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("loto.in");
ofstream out("loto.out");
int M = 300000001;
int n;
int val[101], urm[101], lst[300000001], nr = 0, v[101];
long long int s;
void adauga( long long int x )
{
int r = x % M;
nr++;
val[nr] = x;
urm[nr] = lst[r];
lst[r] = nr;
}
bool cauta( long long int x )
{
int p = lst[x % M];
while( p != 0 )
{
if ( val[p] == x )
return true;
p = urm[p];
}
return false;
}
void afiseaza( int x )
{
int i, j, k;
for ( i = 1; i <= n; i++ )
for ( j = 1; j <= n; j++ )
for ( k = 1; k <= n; k++ )
if ( v[i] + v[j] + v[k] == x )
{
out << v[i]<<' '<< v[j]<<' '<<v[k];
return;
}
}
int main()
{
int i, j, k;
in >> n>>s;
for ( i = 1; i <= n; i++ )
in >> v[i];
for ( i = 1; i <= n; i++ )
{
for ( j = 1; j <= n; j++ )
{
for ( k = 1; k <= n; k++ )
adauga(v[i]+v[j]+v[k]);
}
}
for ( i = 1; i <= n; i++ )
for ( j = 1; j <= n; j++ )
for ( k = 1; k <= n; k++ )
{
if ( cauta( s - v[i] - v[j] - v[k] ) )
{
out << v[i] <<' '<<v[j]<<' '<<v[k]<<' ';
afiseaza(s-v[i]-v[j]-v[k]);
return 0;
}
}
out << -1;
return 0;
}