Cod sursa(job #121524)

Utilizator mihai0110Bivol Mihai mihai0110 Data 8 ianuarie 2008 22:21:05
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.61 kb
#include<stdio.h>
long long n,i,j,k,nr,c,p,x,li,ls,mij,gas,S;
long long s[101],indici[50][4],sume[50];
void intersch(long long c,long long p)
		{
		long long aux;
		aux=sume[c];
		sume[c]=sume[p];
		sume[p]=aux;
		aux=indici[c][1];
		indici[c][1]=indici[p][1];
		indici[p][1]=aux;
		aux=indici[c][2];
		indici[c][2]=indici[p][2];
		indici[p][2]=aux;
		aux=indici[c][3];
		indici[c][3]=indici[p][3];
		indici[p][3]=aux;
		}
int main(void)
{
freopen("loto.in","r",stdin);
freopen("loto.out","w",stdout);
scanf("%lld%lld",&n,&S);
for(i=1;i<=n;i++)
scanf("%lld",&s[i]);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
for(k=1;k<=n;k++)
		{
		nr++;
		sume[nr]=s[i]+s[j]+s[k];
		indici[nr][1]=i;
		indici[nr][2]=j;
		indici[nr][3]=k;
		c=nr;
		p=nr/2;
		while(p>0)
				{
				if(sume[c]<sume[p])
						{
								intersch(c,p);
								c=p;
								p=p/2;
						}
				else
				p=0;
				}
		}
i=i;
for(i=nr;i>1;i--)
		{
		intersch(1,i);
		p=1;
		c=2;
		while(c<i)
				{
				if(sume[c]>sume[c+1]&&c+1<i)
						c++;
				if(sume[p]>sume[c])
						{
						intersch(c,p);
						p=c;
						c*=2;
						}
				else
				c=i;
				}
		}
i=i;
gas=0;
for(k=1;k<=nr;k++)
		{
		x=S-sume[k];
		li=1;
		ls=nr;
		while(li<ls)
				{
				mij=(li+ls)/2;
				if(sume[mij]==x)
					{
					printf("%lld %lld %lld %lld %lld %lld",s[indici[k][1]],s[indici[k][2]],s[indici[k][3]],s[indici[mij][1]],s[indici[mij][2]],s[indici[mij][3]]);
					gas=1;
					k=nr+1;

					break;
					}
				else
				if(x<sume[mij])
					li=mij;
				else
					ls=mij;
				}
		}
if(!gas)
printf("-1");
printf("\n");
return 0;
}