Cod sursa(job #529476)

Utilizator valentin.harsanValentin Harsan valentin.harsan Data 5 februarie 2011 11:10:51
Problema Loto Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;

ifstream aa("loto.in");
ofstream ss("loto.out");
int n,s,i,j,k,x[102],y[1000001],z[3][1000001],qq[8],nr,pas;
int cmp(int a,int b) {
	return a<b;
}
void citire();
void caut();
int main() {
	citire();
	for (i=1;i<=nr;++i) {
		caut();		
		if (y[j]+y[i]==s && j!=0) {
			qq[1]=z[0][i]; qq[2]=z[1][i]; qq[3]=z[2][i]; qq[4]=z[0][j]; qq[5]=z[1][j]; qq[6]=z[2][j];
			sort(&qq[1],&qq[7],cmp);
			for (i=1;i<=6;++i)
				ss << x[qq[i]] << " ";
			return 0;
		}
	}
	ss << "-1";
	return 0;
}

void caut() {
	pas=1<<18;
	for (j=0;pas>0;pas>>=1) {
		while (j+pas<=nr && y[j+pas]+y[i]<=s)
			j+=pas;
	}
}

void citire() {
	aa >> n >> s;
	for (i=1;i<=n;++i) {
		aa >> x[i];
	}
	for (i=1;i<=n;++i) {
		if (i==4) {
			i=4;
		}
		for (j=1;j<=n;++j) {
			for (k=1;k<=n;++k) {
				y[++nr]=x[i]+x[j]+x[k];
				z[0][nr]=i; z[1][nr]=j; z[2][nr]=k;
			}
		}
	}
	sort(&y[1],&y[nr+1],cmp);
}