Pagini recente » Cod sursa (job #1143800) | Cod sursa (job #1538730) | Cod sursa (job #1588432) | Cod sursa (job #23147) | Cod sursa (job #1368832)
#include <fstream>
#include<iostream>
using namespace std;
ifstream in("loto.in");
ofstream out("loto.out");
const int MOD=666013;
const int N=1100001;
int n,S,v[101],lst[MOD],val[N],urm[N],m;
void adauga(int x, int rest){
n++;
val[n] = x;
urm[n] = lst[rest];
lst[rest] = n;
}
bool verifica(int x,int rest){
int p=lst[rest];
while(p!=0){
if(val[p]==x)
return true;
p=urm[p];
}
return false;
}
void scrie(int su){
int i,j,k;
for(i=1;i<=m;i++)
for(j=1;j<=m;j++)
for(k=1;k<=m;k++)
if(v[i]+v[j]+v[k]==su){
out<<v[i]<<" "<<v[j]<<" "<<v[k];
return;
}
}
int main()
{
in>>m>>S;
int i,j,k,su,rest;
for(i=1;i<=m;i++)
in>>v[i];
for(i=1;i<=m;i++)
for(j=1;j<=m;j++)
for(k=1;k<=m;k++){
su=v[i]+v[j]+v[k];
rest=su%MOD;
adauga(su,rest);
}
bool cod=false;
for(i=1;i<=m&& cod==false;i++)
for(j=1;j<=m && cod==false;j++)
for(k=1;k<=m && cod==false;k++){
su=v[i]+v[j]+v[k];
//out<<su<<"\n";
rest=(S - su)%MOD;
cod=verifica(S-su,rest);
if(cod==true){
out<<v[i]<<" "<<v[j]<<" "<<v[k]<<" ";
scrie(S-su);
}
}
if(cod==false)
out<<"-1";
in.close();
out.close();
return 0;
}