Mai intai trebuie sa te autentifici.
Cod sursa(job #276445)
Utilizator | Data | 11 martie 2009 10:26:14 | |
---|---|---|---|
Problema | Loto | Scor | 5 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.69 kb |
#include <iostream.h>
#include <fstream.h>
#define IN "loto.in"
#define OUT "loto.out"
#define MAX 10000001
#define vall 1001
ifstream fin(IN);
ofstream fout(OUT);
long nr[vall],alege[MAX];
char sume[MAX];
char sume1[MAX];
long alese[vall];
long n,s,suma,cnt,cate;
void citire();
void pas();
void alg();
void afis();
void procesez();
int verif(long);
int main()
{
citire();
fin.close();
alg();
pas();
if(cnt)
procesez();
afis();
fout.close();
return 0;
}
void citire()
{
long i,j;
long nrr=0;
fin>>n>>suma;
for(i=1;i<=n;i++)
for(j=1;j<=6;j++)
{
nrr++;
if(j==1)
{
fin>>nr[nrr];
s+=nr[nrr];
}
else
{
nr[nrr]=nr[nrr-1];
s+=nr[nrr-1];
}
}
n=nrr;
}
void pas()
{
if(suma<=s)
if(alege[suma])
while(suma)
{
cnt++;
alese[cnt]=alege[suma];
suma=suma-alege[suma];
}
}
void alg()
{
long i,j;
for(i=1;i<=n;i++)
{
sume1[nr[i]]=1;
for(j=1;j<=s;j++)
if(sume[j]==1)
sume1[j+nr[i]]=1;
for(j=1;j<=s;j++)
if(sume1[j]==1 && sume[j]==0)
{
sume[j]=1;
alege[j]=nr[i];
sume1[j]=0;
}
}
}
void afis()
{
long i;
if(cnt==0 || cate!=6)
{
fout<<"-1"<<endl;
return ;
}
for(i=1;i<=cnt;i++)
if(alese[i]!=-32000)
fout<<alese[i]<<" ";
}
void procesez()
{
long i,j;
cate=cnt;
for(i=1;i<=cnt;i++)
for(j=i+1;j<=cnt;j++)
if(verif(alese[i]+alese[j])==1)
{
alese[i]+=alese[j];
alese[j]=-32000;
cate--;
if(cate==6)
return;
}
}
int verif(long val)
{
long i;
for(i=1;i<=n;i=i+6)
if(nr[i]==val)
return 1;
return 0;
}