Cod sursa(job #603898)

Utilizator costyv87Vlad Costin costyv87 Data 19 iulie 2011 09:29:18
Problema Loto Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <cstdio>
#include <algorithm>
using namespace std;
FILE *f,*g;
int v[110];
int i,j,q,nn,n,s,ss;
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);

int mxx=-1;

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

if (mxx*6<s) {
	fprintf(g,"-1");
	fclose(g);
	return 0;
	}

nn=0;

for (i=1;i<=n;i++)
	for (j=1;j<=n;j++)
		for (q=1;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];
			}

sort(a+1,a+nn,cmp);
bool ok=false;

for (i=1;i<=nn;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;
		}
	
	}

if (ok==false)
	fprintf(g,"-1");

fclose(g);
return 0;
}