Cod sursa(job #142299)

Utilizator razvi9Jurca Razvan razvi9 Data 24 februarie 2008 13:24:26
Problema Loto Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include<cstdio>
#include<algorithm>
using namespace std;
int n,s,v[100],m,i,j,k,st,dr,s1,mij;
pair<int,int> a[100*100*100];

inline void print(int i1,int j1)
{
	int s[6],i,j,aux;
	s[0]=v[a[i1].second/(100*100)];
	s[1]=v[(a[i1].second/100)%100];
	s[2]=v[(a[i1].second)%100];
	s[3]=v[a[j1].second/(100*100)];
	s[4]=v[(a[j1].second/100)%100];
	s[5]=v[(a[j1].second)%100];
	for(i=0;i<6;i++)
		for(j=i+1;j<6;j++)
			if(s[i]>s[j]){aux=s[i];s[i]=s[j];s[j]=aux;}
	printf("%d %d %d %d %d %d",s[0],s[1],s[2],s[3],s[4],s[5]);
}	

int main()
{freopen("loto.in","r",stdin);
 freopen("loto.out","w",stdout);
 scanf("%d %d",&n,&s);
 for(i=1;i<=n;++i){
	 scanf("%d",&v[i]);
	 for(j=1;j<=i;++j)
		 for(k=1;k<=j;++k){
			 a[m].first=v[i]+v[j]+v[k];
			 a[m].second=i*100*100+j*100+k;
			 ++m;}}
 sort(&a[0],&a[m]);
 for(i=0;i<m;i++){
	 s1=s-a[i].first;
	 if(s1<a[i].first) continue;
	 st=i;dr=m-1;
	 while(st<=dr){
		 mij=(st+dr)>>1;
		 if(a[mij].first==s1) break;
		 if(a[mij].first<s1) st=mij+1;
		 else dr=mij-1;}
	 if(a[mij].first==s1) {
		 print(i,mij);
		 fclose(stdout);
		 return 0;}}
 printf("-1\n");
 fclose(stdout);
 return 0;}