Pagini recente » Cod sursa (job #155844) | Cod sursa (job #2158825) | Cod sursa (job #12997) | Cod sursa (job #2124089) | Cod sursa (job #1217712)
#include <fstream>
#include <iostream>
#include <vector>
#define lld long long int
#define prim 666013
using namespace std;
struct lista{
int nr;
lista *next;
};
lld N,S,a[100000]; vector<lld> table[prim]; bool g;
/*void add(int nr){
int ind=nr%prim;
lista *aux=new lista;
aux->nr=nr;
aux->next=table[ind];
table[ind]=aux;
}
*/
bool cauta(int nr){
lld ind=nr%prim;
/*
for (lista *p=table[ind]; p!=NULL; p=p->next)
if (p->nr==nr)
return 1;
*/
for (unsigned int i=0; i<table[ind].size(); i++)
if (table[ind][i]==nr)
return 1;
return 0;
}
int main(){
ifstream in("loto.in");
ofstream out("loto.out");
in >> N >> S;
lld i,j,k,aux;
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++)
table[(a[i]+a[j]+a[k])%prim].push_back(a[i]+a[j]+a[k]);
for (i=1; i<=N && !g; i++)
for (j=i; j<=N && !g; j++)
for (k=j; k<=N && !g; k++){
g=cauta(S-(a[i]+a[j]+a[k]));
if (g){
aux=S-(a[i]+a[j]+a[k]);
out << a[i] << " " << a[j] << " " << a[k] << " ";
}
}
if (g==0){
out << -1;
return 0;
}
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]==aux){
out << a[i] << " " << a[j] << " " << a[k];
return 0;
}
return 0;
}