Cod sursa(job #604955)

Utilizator CristibaluCristi B Cristibalu Data 26 iulie 2011 11:19:24
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <cstdio>
#include <algorithm>
using namespace std;
FILE *f,*g;
int v[110],v2[330];
int i,j,q,nn,n,s,ss,n2;
struct cp{int x,y,z,nr;} mx,a[1000100];

void caut(int i, int j ,int x) {
int m;

if (i<=j) {
	m=(i+j)/2;
	if (a[m].nr==x) {
		mx=a[m];
		return ;
		}
	if (a[m].nr>x) 
		caut (i,m-1,x);
	else 
		caut (m+1,j,x);
	}

}

bool cmp(cp i,cp j) {
return (i.nr>j.nr);
}

int main() {
f=fopen("loto.in","r");
g=fopen("loto.out","w");

fscanf(f,"%d%d",&n,&s);

for (i=1;i<=n;i++) {
	fscanf(f,"%d",&v[i]);
	}

nn=0;

for (i=1;i<=n;i++)
	for (j=i;j<=n;j++)
		for (q=j;q<=n;q++) {
			a[++nn].nr=v[i]+v[j]+v[q];
			a[nn].x=v[i];
			a[nn].y=v[j];
			a[nn].z=v[q];
			}

bool ok=false;
/*for (i=1;i<=nn;i++)
	fprintf(g,"%d\n",a[i].nr);*/
sort(a+1,a+nn+1,cmp);

/*
for (i=1;i<=nn && a[i].nr<s;i++) {
	ss=s-a[i].nr;
	mx.nr=-1;
	caut(1,nn,ss);
	if (mx.nr!=-1) {
		fprintf(g,"%d %d %d %d %d %d",a[i].x,a[i].y,a[i].z,mx.x,mx.y,mx.z); 
          ok=true;
		break;
		}
	
	}
*/
i=1; j=nn;

while (a[i].nr+a[j].nr!=s && i<=j) {
	if (a[i].nr+a[j].nr<s) 
		--j;
		else 
			i++;
	}


if (i<=j)
	{
		fprintf(g,"%d %d %d %d %d %d",a[i].x,a[i].y,a[i].z,a[j].x,a[j].y,a[j].z); 
	}
else
	fprintf(g,"-1");

fclose(g);
return 0;
}