Cod sursa(job #2807023)

Utilizator RazvanLazar2004Lazar Razvan Gabriel RazvanLazar2004 Data 23 noiembrie 2021 12:03:00
Problema Loto Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>
#include <algorithm>
using namespace std;
int main(int argc, char *argv[]) {
	long long int g[1000001],x[1000001],y[1000001],z[1000001],v[101],solutie[7];
	long long int n,s,p=0;
	cin>>n>>s;
	for(long long int i=1;i<=n;i++){
		cin>>v[i];
	}
	for(long long int i=1;i<=n;i++){
		for(long long int j=1;j<=n;j++){
			for(long long int k=1;k<=n;k++){
				g[(i-1)*n*n+(j-1)*n+k]=v[i]+v[j]+v[k];
				x[(i-1)*n*n+(j-1)*n+k]=v[i];
				y[(i-1)*n*n+(j-1)*n+k]=v[j];
				z[(i-1)*n*n+(j-1)*n+k]=v[k];
			}	
		}
	}
	sort(g+1,g+n+1);
	long long int t=1;
	while(t*2<=n*n*n){
		t*=2;
	}
	for(long long int i=1;i<=n*n*n;i++){
		long long int r=0;
		for(long long int h=t;h>0;h/=2){
			if(g[r+h]<=s-g[i]){
				r+=h;
			}
		}
		if(v[i]+v[r]==s){
			p=1;
			solutie[1]=x[i];
			solutie[2]=y[i];
			solutie[3]=z[i];
			solutie[4]=x[r];
			solutie[5]=y[r];
			solutie[6]=z[r];
			break;
		}
	}
	sort(solutie+1,solutie+7);
	if(p==0){
		cout<<-1;
	}else{
		for(int i=1;i<=6;i++){
			cout<<solutie[i]<<" ";
		}
	}
}