Pagini recente » Cod sursa (job #1549709) | Cod sursa (job #3179724) | Cod sursa (job #2980442) | Cod sursa (job #2860472) | Cod sursa (job #2658666)
#include <fstream>
#include <stdio.h>
#include <vector>
using namespace std;
ifstream cin ( "loto.in" );
ofstream cout ( "loto.out" );
struct sume {
int a, b, c, s;
};
#define NMAX 100
#define MOD 666013
int v[NMAX];
vector <sume> myHash[MOD];
void adauga ( int a, int b, int c, int s ) {
int cod = s % MOD, i = 0;
while ( i < myHash[cod].size() && s != myHash[cod][i].s )
i++;
if ( i == myHash[cod].size() )
myHash[cod].push_back({a, b, c, s});
}
int cauta ( int s ) {
int cod = s % MOD, i = 0;
while ( i < myHash[cod].size() && s != myHash[cod][i].s )
i++;
if ( i == myHash[cod].size() )
return -1;
return i;
}
int main()
{
int n, i, j, k, sum, ans1, ans2, ans3, ans4, ans5, ans6, ok, p;
cin >> n >> p;
for ( i = 1; i <= n; i++ )
cin >> v[i];
ok = -1;
i = j = k = 1;
while ( ok == -1 && i <= n ) {
j = i;
while ( ok == -1 && j <= n ) {
k = j;
while ( ok == -1 && k <= n ) {
sum = v[i] + v[j] + v[k];
adauga(v[i], v[j], v[k], sum );
if ( p - sum >= 0 ) {
ok = cauta(p - sum);
if ( ok != -1 ) {
ans1 = v[i];
ans2 = v[j];
ans3 = v[k];
ans4 = myHash[( p - sum ) % MOD][ok].a;
ans5 = myHash[( p - sum ) % MOD][ok].b;
ans6 = myHash[( p - sum ) % MOD][ok].c;
}
}
k++;
}
j++;
}
i++;
}
if ( ok == -1 )
cout << "-1";
else
cout << ans1 << " " << ans2 << " " << ans3 << " " << ans4 << " " << ans5 << " " << ans6;
return 0;
}