Pagini recente » Cod sursa (job #2470307) | Monitorul de evaluare | Cod sursa (job #1809299) | Cod sursa (job #177486) | Cod sursa (job #1809348)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("loto.in");
ofstream out("loto.out");
const int k = 666019, N = 100000001;
int lst[k],v[101], val[N], urm[N];
int nr, x, n, s;
void adauga(int x){
int r = x%k;
nr++;
val[nr] = x;
urm[nr] = lst[r];
lst[r] = nr;
}
bool exista(int x){
int r = x%k,p;
p = lst[r];
while(p!=0){
if(val[p] == x)
return true;
p = urm[p];
}
return false;
}
void scrie(int s){
int i,j,k;
for(i=1;i<=n;i++)
for(j=i;j<=n;j++)
for(k=j;k<=n;k++)
if(v[i]+v[j]+v[k] == s){
out<<v[i]<<" "<<v[j]<<" "<<v[k];
return;
}
}
int main()
{
in>>n>>s;
int i,j,k;
for(i=1;i<=n;i++)
in>>v[i];
for(i=1;i<=n;i++)
for(j=i;j<=n;j++)
for(k=j;k<=n;k++)
adauga(v[i]+v[j]+v[k]);
for(i=1;i<=n;i++)
for(j=i;j<=n;j++)
for(k=j;k<=n;k++){
if(v[i]+v[j]+v[k] <=s && exista(s-v[i]-v[j]-v[k])){
out<<v[i]<<" "<<v[j]<<" "<<v[k]<<" ";
scrie(s-v[i]-v[j]-v[k]);
return 0;
}
}
out << "-1";
return 0;
}