Cod sursa(job #354586)

Utilizator proflaurianPanaete Adrian proflaurian Data 8 octombrie 2009 20:56:44
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<stdio.h>
#include<utility>
#include<algorithm>
using namespace std;
pair<int,int> a[200000];
int n,s,i,j,k,c,d,u,cnt,x[101],sc;
void read(),solve();
int main()
{
	read();
	solve();
	return 0;
}
void read()
{
	freopen("loto.in","r",stdin);
	freopen("loto.out","w",stdout);
	scanf("%d%d",&n,&s);
	for(i=1;i<=n;i++)
		scanf("%d",&x[i]);
}
void solve()
{
	for(i=1;i<=n;i++)
		for(j=i;j<=n;j++)
			for(k=j;k<=n;k++)
			{
				a[++c].first=x[i]+x[j]+x[k];
				a[c].second=(i<<14)+(j<<7)+k;
			}
	sort(a+1,a+c+1);
	for(d=1,u=c;d<=u;)
	{
		sc=a[d].first+a[u].first;
		if(sc>s){u--;continue;}
		if(sc<s){d++;continue;}
		break;
	}
	if(a[d].first+a[u].first!=s){printf("-1\n");return;}
	i=a[d].second;
	j=i&127;printf("%d ",x[j]);i>>=7;
	j=i&127;printf("%d ",x[j]);i>>=7;
	j=i&127;printf("%d ",x[j]);i>>=7;
	i=a[u].second;
	j=i&127;printf("%d ",x[j]);i>>=7;
	j=i&127;printf("%d ",x[j]);i>>=7;
	j=i&127;printf("%d\n",x[j]);i>>=7;
				
}