Cod sursa(job #165110)

Utilizator nimeniaPaul Grigoras nimenia Data 25 martie 2008 14:20:41
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.19 kb
#include <stdio.h>

long v[101],n,ns=1;
long a[1000];
long drum[1000];
int auxxx[8];

int poz(long li,long ls){
	long i=li,j=ls,t;int mod=1;
	while (i!=j){
		  if (a[i]>a[j]){
			 t=a[i],a[i]=a[j],a[j]=t;
			 t=drum[i],drum[i]=drum[j],drum[j]=t;
			 mod=(mod+1)%2;
			 }
		  if (mod==0) i++;
		  else j--;
		  }
	return i;

}

void qsort(long li, long ls){
	if (li<ls){
		long k=poz(li,ls);
		qsort(li,k);
		qsort(k+1,ls);
	}
}


int gasit(long ax){
   long li=1,ls=ns,m;
   if (a[ls]==ax) return ls;
   else {
   while (li!=ls){
	m=(li+ls)/2;
	if (ax>a[m]) li=m+1;
	else if (ax<a[m]) ls=m;
	else if (ax==a[m]) return m;
   }}
   return 0;

}



int main(){
	long j,k,q,aux,s;
	freopen ("loto.in", "r",stdin);
	freopen ("loto.out","w",stdout) ;
	scanf("%ld%ld",&n,&s);
	for(long i=1;i<=n;i++) scanf("%ld",v+i);
	for(i=1;i<=n;i++)for(j=1;j<=n;j++)for(q=1;q<=n;q++)a[ns++]=v[i]+v[j]+v[q],drum[ns-1]=i,drum[ns-1]=drum[ns-1]*100+j,drum[ns-1]=drum[ns-1]*100+q;
	ns--;
	qsort(1,ns);

   /*	for(i=1;i<=ns;i++)
		printf("%ld ",v[i]);
	printf("\n");

	for(i=1;i<=ns;i++)
		printf("%ld ",a[i]);
	printf("\n");
	for(i=1;i<=ns;i++)
		printf("%ld ",drum[i]);
   */


	int gata=0;
	for (i=1;i<=ns && !gata;i++)
		if (a[i]!=a[i-1]){
			k=gasit(s-a[i]);
			if (k)
				{gata=1;

				 if (!(drum[i]%100==0)) auxxx[0]=drum[i]%100;
				 else auxxx[0]=100;
				 drum[i]/=100;
				 if (!(drum[i]%100==0)) auxxx[1]=drum[i]%100;
				 else auxxx[1]=100;
				 drum[i]/=100;
				 if (!(drum[i]%100==0)) auxxx[2]=drum[i]%100;
				 else auxxx[2]=100;
				 drum[i]/=100;

				 if (!(drum[k]%100==0)) auxxx[3]=drum[k]%100;
				 else auxxx[3]=100;
				 drum[k]/=100;
				 if (!(drum[k]%100==0)) auxxx[4]=drum[k]%100;
				 else auxxx[4]=100;
				 drum[k]/=100;
				 if (!(drum[k]%100==0)) auxxx[5]=drum[k]%100;
				 else auxxx[5]=100;
				 drum[k]/=100;
				 int t;
				 for(i=0;i<5;i++)
					for(j=i+1;j<6;j++)
						if (auxxx[i]>auxxx[j]) t=auxxx[i],auxxx[i]=auxxx[j],auxxx[j]=t;

				 printf("%d %d %d %d %d %d",auxxx[0],auxxx[1],auxxx[2],auxxx[3],auxxx[4],auxxx[5]);
				}

		}
	if (!gata) printf("-1");

	return 0;
    
    
                     
    
}