Cod sursa(job #672522)

Utilizator ionut_ungureanuUngureanu Vladut Ionut ionut_ungureanu Data 2 februarie 2012 14:32:44
Problema Loto Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include<stdio.h>
#include<vector>
#define FIN "loto.in","r",stdin
#define FOUT "loto.out","w",stdout
#define NMAX 101

using namespace std;

struct loto 
{
	int s,a,b,c;
};

loto x;
vector <loto>v[2011];
vector <loto>::iterator it;
vector <loto>::iterator it2;

int n,S,i,j,k,p,ok,ss;
int a[NMAX];


void read()
{
freopen(FIN);
scanf("%d %d",&n,&S);
for(i=1;i<=n;i++)
	scanf("%d",&a[i]);
}


vector<loto>::iterator search(loto x)
{
	for(it2=v[x.s%p].begin();it2!=v[x.s%p].end();++it2)
		if((*it2).s == x.s%p)return it2;
	return v[x.s%p].end();
}

void insert(loto x)
{
	it2=search(x);
	if(it2==v[x.s%p].end())
		v[x.s%p].push_back(x);
}

void solve()
{
freopen(FOUT);
for(i=1;i<=n&&!ok;i++)
	for(j=1;j<=n&&!ok;j++)
		for(k=1;k<=n&&!ok;k++)
			{
				x.a=a[i];
				x.b=a[j];
				x.c=a[k];
				x.s=x.a+x.b+x.c;
				if(x.s<=S)
					{
						insert(x);
						ss=S-x.s;
						for(it=v[ss%p].begin();it!=v[ss%p].end();++it)
							if((*it).s==ss)
								{
									printf("%d %d %d %d %d %d",x.a,x.b,x.c,(*it).a,(*it).b,(*it).c);
									ok=1;
								}
					}
			}
if(!ok)printf("-1");
}



int main()
{
p=2011;
read();
solve();
return 0;
}